/*
 * A Bison parser, made with Bison version GNU Bison version 1.24
 *
 * Copyright 2009, Gerben van Veenendaal (http://www.gerbenvv.nl)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * See the GNU General Public License in the COPYING file at the
 * root directory of this project for more details.
 */

#define YYBISON 1  /* Identify Bison output.  */

#define	T_INCLUDE	258
#define	T_INCLUDE_ONCE	259
#define	T_EVAL	260
#define	T_REQUIRE	261
#define	T_REQUIRE_ONCE	262
#define	T_LOGICAL_OR	263
#define	T_LOGICAL_XOR	264
#define	T_LOGICAL_AND	265
#define	T_PRINT	266
#define	T_PLUS_EQUAL	267
#define	T_MINUS_EQUAL	268
#define	T_MUL_EQUAL	269
#define	T_DIV_EQUAL	270
#define	T_CONCAT_EQUAL	271
#define	T_MOD_EQUAL	272
#define	T_AND_EQUAL	273
#define	T_OR_EQUAL	274
#define	T_XOR_EQUAL	275
#define	T_SL_EQUAL	276
#define	T_SR_EQUAL	277
#define	T_BOOLEAN_OR	278
#define	T_BOOLEAN_AND	279
#define	T_IS_EQUAL	280
#define	T_IS_NOT_EQUAL	281
#define	T_IS_IDENTICAL	282
#define	T_IS_NOT_IDENTICAL	283
#define	T_IS_SMALLER_OR_EQUAL	284
#define	T_IS_GREATER_OR_EQUAL	285
#define	T_SL	286
#define	T_SR	287
#define	T_INSTANCEOF	288
#define	T_INC	289
#define	T_DEC	290
#define	T_INT_CAST	291
#define	T_DOUBLE_CAST	292
#define	T_STRING_CAST	293
#define	T_ARRAY_CAST	294
#define	T_OBJECT_CAST	295
#define	T_BOOL_CAST	296
#define	T_UNSET_CAST	297
#define	T_NEW	298
#define	T_CLONE	299
#define	T_EXIT	300
#define	T_IF	301
#define	T_ELSEIF	302
#define	T_ELSE	303
#define	T_ENDIF	304
#define	T_LNUMBER	305
#define	T_DNUMBER	306
#define	T_STRING	307
#define	T_STRING_VARNAME	308
#define	T_VARIABLE	309
#define	T_NUM_STRING	310
#define	T_INLINE_HTML	311
#define	T_CHARACTER	312
#define	T_BAD_CHARACTER	313
#define	T_ENCAPSED_AND_WHITESPACE	314
#define	T_CONSTANT_ENCAPSED_STRING	315
#define	T_ECHO	316
#define	T_DO	317
#define	T_WHILE	318
#define	T_ENDWHILE	319
#define	T_FOR	320
#define	T_ENDFOR	321
#define	T_FOREACH	322
#define	T_ENDFOREACH	323
#define	T_DECLARE	324
#define	T_ENDDECLARE	325
#define	T_AS	326
#define	T_SWITCH	327
#define	T_ENDSWITCH	328
#define	T_CASE	329
#define	T_DEFAULT	330
#define	T_BREAK	331
#define	T_CONTINUE	332
#define	T_FUNCTION	333
#define	T_CONST	334
#define	T_RETURN	335
#define	T_TRY	336
#define	T_CATCH	337
#define	T_THROW	338
#define	T_USE	339
#define	T_GLOBAL	340
#define	T_STATIC	341
#define	T_ABSTRACT	342
#define	T_FINAL	343
#define	T_PRIVATE	344
#define	T_PROTECTED	345
#define	T_PUBLIC	346
#define	T_VAR	347
#define	T_UNSET	348
#define	T_ISSET	349
#define	T_EMPTY	350
#define	T_HALT_COMPILER	351
#define	T_CLASS	352
#define	T_INTERFACE	353
#define	T_EXTENDS	354
#define	T_IMPLEMENTS	355
#define	T_OBJECT_OPERATOR	356
#define	T_DOUBLE_ARROW	357
#define	T_LIST	358
#define	T_ARRAY	359
#define	T_CLASS_C	360
#define	T_METHOD_C	361
#define	T_FUNC_C	362
#define	T_LINE	363
#define	T_FILE	364
#define	T_OPEN_TAG	365
#define	T_OPEN_TAG_WITH_ECHO	366
#define	T_CLOSE_TAG	367
#define	T_START_HEREDOC	368
#define	T_END_HEREDOC	369
#define	T_DOLLAR_OPEN_CURLY_BRACES	370
#define	T_CURLY_OPEN	371
#define	T_PAAMAYIM_NEKUDOTAYIM	372


#include "parser.h"

#include "exception.h"
#include "settings.h"
#include "formatter.h"
#include "scanner.h"
namespace PhpTidyLib{

extern CSettings  *settings;
extern PhpFormatter *formatter;
extern CScanner   *scanner;

/* this is needed for the token names table */
#define YYDEBUG 1

#ifndef YYLTYPE
typedef struct yyltype
{
	int timestamp;
	int first_line;
	int first_column;
	int last_line;
	int last_column;
	char *text;
} yyltype;

#define YYLTYPE yyltype
#endif

#ifndef YYSTYPE
#define YYSTYPE int
#endif
#include <stdio.h>

#ifndef __cplusplus
#ifndef __STDC__
#define const
#endif
#endif



#define	YYFINAL		669
#define	YYFLAG		-32768
#define	YYNTBASE	144

#define YYTRANSLATE(x) ((unsigned)(x) <= 372 ? yytranslate[x] : 253)

static const short yytranslate[] = {     0,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,    48,     2,     2,   142,    47,    31,     2,   138,
   139,    45,    42,     8,    43,    44,    46,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,    26,   137,    36,
    13,    38,    25,    60,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    61,     2,   143,    30,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,   140,    29,   141,    50,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
     6,     7,     9,    10,    11,    12,    14,    15,    16,    17,
    18,    19,    20,    21,    22,    23,    24,    27,    28,    32,
    33,    34,    35,    37,    39,    40,    41,    49,    51,    52,
    53,    54,    55,    56,    57,    58,    59,    62,    63,    64,
    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
    85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
   125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
   135,   136
};

#if YYDEBUG != 0
static const short yyprhs[] = {     0,
     0,     1,     7,    10,    12,    14,    16,    21,    23,    24,
    30,    33,    35,    37,    39,    44,    46,    47,    48,    58,
    59,    64,    67,    71,    74,    78,    81,    85,    89,    93,
    97,    99,   103,   105,   108,   110,   112,   118,   122,   124,
   128,   129,   141,   142,   152,   153,   160,   161,   175,   176,
   187,   188,   195,   196,   209,   210,   220,   221,   231,   232,
   239,   240,   249,   250,   265,   266,   274,   275,   279,   280,
   281,   289,   290,   291,   295,   300,   306,   307,   313,   318,
   320,   322,   323,   325,   326,   329,   331,   334,   338,   344,
   345,   347,   349,   352,   361,   362,   364,   365,   376,   377,
   386,   387,   395,   397,   400,   403,   404,   407,   408,   411,
   412,   415,   417,   421,   423,   424,   427,   431,   437,   442,
   447,   453,   461,   468,   469,   471,   473,   474,   476,   478,
   481,   485,   490,   494,   496,   498,   501,   506,   510,   516,
   518,   522,   525,   526,   530,   533,   534,   544,   546,   550,
   552,   554,   555,   557,   559,   562,   564,   566,   568,   570,
   572,   574,   578,   584,   586,   590,   596,   601,   602,   604,
   608,   610,   617,   622,   629,   631,   634,   637,   640,   643,
   647,   650,   652,   656,   660,   666,   668,   670,   672,   675,
   678,   679,   685,   689,   693,   697,   701,   705,   709,   713,
   717,   721,   725,   729,   733,   736,   739,   742,   745,   748,
   751,   754,   758,   762,   766,   770,   774,   778,   782,   786,
   790,   794,   798,   802,   806,   810,   814,   818,   822,   826,
   830,   834,   838,   842,   846,   850,   853,   856,   859,   862,
   867,   874,   881,   886,   888,   890,   895,   897,   900,   901,
   904,   905,   908,   912,   913,   917,   919,   921,   923,   925,
   927,   929,   931,   933,   935,   937,   940,   943,   948,   950,
   952,   954,   956,   960,   961,   964,   965,   967,   973,   977,
   981,   983,   985,   987,   993,   995,   998,   999,  1003,  1007,
  1008,  1010,  1013,  1015,  1017,  1019,  1022,  1026,  1031,  1036,
  1038,  1040,  1045,  1046,  1048,  1050,  1052,  1057,  1062,  1064,
  1066,  1070,  1072,  1075,  1079,  1081,  1082,  1084,  1089,  1090,
  1093,  1099,  1103,  1107,  1109,  1116,  1121,  1126,  1129,  1134,
  1139,  1144,  1147,  1150,  1153,  1156
};

static const short yyrhs[] = {    -1,
   144,   234,    13,   233,   137,     0,   144,   145,     0,   149,
     0,   184,     0,   186,     0,   115,   138,   139,   137,     0,
   147,     0,     0,   147,   234,    13,   233,   137,     0,   147,
   148,     0,   149,     0,   184,     0,   186,     0,   115,   138,
   139,   137,     0,   154,     0,     0,     0,    65,   138,   233,
   139,   150,   149,   151,   169,   171,     0,     0,   140,   152,
   146,   141,     0,    95,   137,     0,    95,   233,   137,     0,
    96,   137,     0,    96,   233,   137,     0,    99,   137,     0,
    99,   233,   137,     0,   104,   199,   137,     0,   105,   201,
   137,     0,    80,   213,   137,     0,   129,     0,   130,   213,
   137,     0,    75,     0,   233,   137,     0,   137,     0,   103,
     0,   112,   138,   153,   139,   137,     0,   102,   233,   137,
     0,   234,     0,   153,     8,   234,     0,     0,    65,   138,
   233,   139,    26,   155,   146,   167,   168,    68,   137,     0,
     0,    82,   138,   233,   139,    26,   156,   146,    83,   137,
     0,     0,    82,   138,   233,   139,   157,   149,     0,     0,
    84,   138,   212,   137,   212,   137,   212,   139,    26,   158,
   146,    85,   137,     0,     0,    84,   138,   212,   137,   212,
   137,   212,   139,   159,   149,     0,     0,    91,   138,   233,
   139,   160,   173,     0,     0,    86,   138,   233,    90,   178,
   177,   139,    26,   161,   146,    87,   137,     0,     0,    86,
   138,   233,    90,   178,   177,   139,   162,   149,     0,     0,
    88,   138,   179,   139,    26,   163,   146,    89,   137,     0,
     0,    88,   138,   179,   139,   164,   149,     0,     0,    81,
   165,   149,    82,   138,   233,   139,   137,     0,     0,   100,
   140,   166,   146,   141,   101,   138,    71,    73,   139,   140,
   146,   141,   180,     0,     0,   167,    66,   138,   233,   139,
    26,   146,     0,     0,    67,    26,   146,     0,     0,     0,
   169,    66,   138,   233,   139,   170,   149,     0,     0,     0,
    67,   172,   149,     0,   140,   176,   174,   141,     0,    26,
   176,   174,    92,   137,     0,     0,   174,    93,   233,   175,
   146,     0,   174,    94,   175,   146,     0,    26,     0,   137,
     0,     0,   137,     0,     0,   121,   178,     0,   234,     0,
    31,   234,     0,    71,    13,   227,     0,   179,     8,    71,
    13,   227,     0,     0,   181,     0,   182,     0,   181,   182,
     0,   101,   138,    71,    73,   139,   140,   146,   141,     0,
     0,    31,     0,     0,    97,   183,    71,   138,   194,   139,
   140,   185,   146,   141,     0,     0,   189,    71,   190,   191,
   140,   187,   202,   141,     0,     0,   117,    71,   192,   140,
   188,   202,   141,     0,   116,     0,   106,   116,     0,   107,
   116,     0,     0,   118,    71,     0,     0,   119,   193,     0,
     0,   118,   193,     0,    71,     0,   193,     8,    71,     0,
   195,     0,     0,   196,    73,     0,   196,    31,    73,     0,
   196,    31,    73,    13,   227,     0,   196,    73,    13,   227,
     0,   195,     8,   196,    73,     0,   195,     8,   196,    31,
    73,     0,   195,     8,   196,    31,    73,    13,   227,     0,
   195,     8,   196,    73,    13,   227,     0,     0,    71,     0,
   123,     0,     0,   198,     0,   233,     0,    31,   234,     0,
   198,     8,   233,     0,   198,     8,    31,   234,     0,   199,
     8,   200,     0,   200,     0,    73,     0,   142,   234,     0,
   142,   140,   233,   141,     0,   201,     8,    73,     0,   201,
     8,    73,    13,   227,     0,    73,     0,    73,    13,   227,
     0,   202,   203,     0,     0,   206,   210,   137,     0,   211,
   137,     0,     0,   207,    97,   183,    71,   138,   194,   139,
   204,   205,     0,   137,     0,   140,   146,   141,     0,   208,
     0,   111,     0,     0,   208,     0,   209,     0,   208,   209,
     0,   110,     0,   109,     0,   108,     0,   105,     0,   106,
     0,   107,     0,   210,     8,    73,     0,   210,     8,    73,
    13,   227,     0,    73,     0,    73,    13,   227,     0,   211,
     8,    71,    13,   227,     0,    98,    71,    13,   227,     0,
     0,   213,     0,   213,     8,   233,     0,   233,     0,   122,
   138,   248,   139,    13,   233,     0,   234,    13,    31,   234,
     0,   234,    13,    31,    62,   220,   225,     0,   216,     0,
   234,    51,     0,    51,   234,     0,   234,    52,     0,    52,
   234,     0,    62,   220,   225,     0,    63,   233,     0,   218,
     0,   233,    49,   220,     0,   138,   233,   139,     0,   233,
    25,   233,    26,   233,     0,   252,     0,   217,     0,   228,
     0,    60,   233,     0,    64,   224,     0,     0,   123,   138,
   215,   250,   139,     0,   234,    13,   233,     0,   234,    14,
   233,     0,   234,    15,   233,     0,   234,    16,   233,     0,
   234,    17,   233,     0,   234,    18,   233,     0,   234,    19,
   233,     0,   234,    20,   233,     0,   234,    21,   233,     0,
   234,    22,   233,     0,   234,    23,   233,     0,   234,    24,
   233,     0,    53,   233,     0,    54,   233,     0,    55,   233,
     0,    56,   233,     0,    57,   233,     0,    58,   233,     0,
    59,   233,     0,   233,    29,   233,     0,   233,    31,   233,
     0,   233,    30,   233,     0,   233,    44,   233,     0,   233,
    42,   233,     0,   233,    43,   233,     0,   233,    45,   233,
     0,   233,    46,   233,     0,   233,    47,   233,     0,   233,
    36,   233,     0,   233,    38,   233,     0,   233,    40,   233,
     0,   233,    41,   233,     0,   233,    27,   233,     0,   233,
    28,   233,     0,   233,     9,   233,     0,   233,    11,   233,
     0,   233,    10,   233,     0,   233,    34,   233,     0,   233,
    35,   233,     0,   233,    32,   233,     0,   233,    33,   233,
     0,   233,    37,   233,     0,   233,    39,   233,     0,    42,
   233,     0,    43,   233,     0,    48,   233,     0,    50,   233,
     0,    71,   138,   197,   139,     0,    71,   136,    71,   138,
   197,   139,     0,    71,   136,   238,   138,   197,   139,     0,
   238,   138,   197,   139,     0,    71,     0,   221,     0,   240,
   120,   244,   222,     0,   240,     0,   222,   223,     0,     0,
   120,   244,     0,     0,   138,   139,     0,   138,   233,   139,
     0,     0,   138,   197,   139,     0,    69,     0,    70,     0,
    79,     0,   127,     0,   128,     0,   124,     0,   125,     0,
   126,     0,   226,     0,    71,     0,    42,   227,     0,    43,
   227,     0,   123,   138,   230,   139,     0,   229,     0,   226,
     0,    71,     0,   229,     0,    71,   136,    71,     0,     0,
   232,   231,     0,     0,     8,     0,   232,     8,   227,   121,
   227,     0,   232,     8,   227,     0,   227,   121,   227,     0,
   227,     0,   234,     0,   214,     0,   239,   120,   244,   237,
   235,     0,   239,     0,   235,   236,     0,     0,   120,   244,
   237,     0,   138,   197,   139,     0,     0,   241,     0,   247,
   241,     0,   240,     0,   219,     0,   241,     0,   247,   241,
     0,    71,   136,   238,     0,   241,    61,   243,   143,     0,
   241,   140,   233,   141,     0,   242,     0,    73,     0,   142,
   140,   233,   141,     0,     0,   233,     0,   245,     0,   238,
     0,   245,    61,   243,   143,     0,   245,   140,   233,   141,
     0,   246,     0,    71,     0,   140,   233,   141,     0,   142,
     0,   247,   142,     0,   248,     8,   249,     0,   249,     0,
     0,   234,     0,   122,   138,   248,   139,     0,     0,   251,
   231,     0,   251,     8,   233,   121,   233,     0,   251,     8,
   233,     0,   233,   121,   233,     0,   233,     0,   251,     8,
   233,   121,    31,   234,     0,   251,     8,    31,   234,     0,
   233,   121,    31,   234,     0,    31,   234,     0,   113,   138,
   153,   139,     0,   114,   138,   234,   139,     0,     5,   138,
   233,   139,     0,    12,   233,     0,     3,   233,     0,     4,
   233,     0,     6,   233,     0,     7,   233,     0
};

#endif

#if YYDEBUG != 0
static const short yyrline[] = { 0,
   116,   120,   134,   138,   140,   142,   146,   161,   167,   171,
   187,   202,   204,   206,   210,   218,   222,   232,   236,   286,
   297,   310,   317,   325,   332,   340,   347,   355,   363,   371,
   379,   381,   394,   396,   403,   423,   427,   438,   448,   450,
   457,   463,   482,   488,   507,   513,   532,   538,   561,   567,
   594,   600,   632,   638,   660,   666,   690,   696,   716,   722,
   741,   747,   767,   773,   806,   810,   832,   836,   844,   848,
   853,   886,   890,   896,   904,   921,   944,   948,   969,   991,
   993,   997,  1001,  1005,  1009,  1015,  1017,  1023,  1028,  1036,
  1040,  1044,  1046,  1052,  1078,  1082,  1086,  1092,  1115,  1121,
  1133,  1139,  1153,  1155,  1160,  1167,  1171,  1178,  1182,  1189,
  1193,  1200,  1202,  1209,  1211,  1217,  1225,  1235,  1246,  1257,
  1262,  1267,  1273,  1281,  1285,  1289,  1295,  1308,  1316,  1318,
  1322,  1327,  1334,  1339,  1343,  1345,  1349,  1355,  1360,  1366,
  1368,  1375,  1385,  1391,  1396,  1400,  1408,  1430,  1432,  1441,
  1443,  1447,  1451,  1457,  1459,  1466,  1468,  1470,  1472,  1474,
  1476,  1480,  1485,  1491,  1493,  1500,  1506,  1514,  1518,  1522,
  1527,  1531,  1544,  1550,  1558,  1560,  1564,  1568,  1572,  1576,
  1581,  1586,  1588,  1593,  1601,  1607,  1609,  1611,  1613,  1617,
  1623,  1628,  1649,  1653,  1657,  1661,  1665,  1669,  1673,  1677,
  1681,  1685,  1689,  1693,  1699,  1704,  1709,  1714,  1719,  1724,
  1729,  1736,  1740,  1744,  1748,  1753,  1763,  1773,  1777,  1781,
  1785,  1789,  1793,  1797,  1801,  1805,  1809,  1813,  1817,  1821,
  1825,  1829,  1833,  1837,  1841,  1845,  1849,  1853,  1857,  1863,
  1867,  1871,  1875,  1881,  1883,  1887,  1891,  1895,  1899,  1905,
  1911,  1915,  1923,  1933,  1937,  1943,  1945,  1947,  1949,  1951,
  1953,  1955,  1957,  1961,  1963,  1965,  1969,  1973,  1983,  1987,
  1989,  1991,  1995,  2001,  2005,  2014,  2018,  2022,  2027,  2032,
  2036,  2040,  2042,  2046,  2050,  2054,  2062,  2068,  2074,  2078,
  2084,  2086,  2092,  2094,  2098,  2100,  2104,  2110,  2120,  2124,
  2128,  2130,  2136,  2140,  2144,  2146,  2150,  2160,  2164,  2168,
  2170,  2176,  2178,  2184,  2198,  2202,  2206,  2208,  2222,  2226,
  2235,  2241,  2247,  2251,  2253,  2259,  2265,  2269,  2275,  2283,
  2291,  2299,  2307,  2315,  2323,  2331
};

static const char * const yytname[] = {   "$","error","$undefined.","T_INCLUDE",
"T_INCLUDE_ONCE","T_EVAL","T_REQUIRE","T_REQUIRE_ONCE","','","T_LOGICAL_OR",
"T_LOGICAL_XOR","T_LOGICAL_AND","T_PRINT","'='","T_PLUS_EQUAL","T_MINUS_EQUAL",
"T_MUL_EQUAL","T_DIV_EQUAL","T_CONCAT_EQUAL","T_MOD_EQUAL","T_AND_EQUAL","T_OR_EQUAL",
"T_XOR_EQUAL","T_SL_EQUAL","T_SR_EQUAL","'?'","':'","T_BOOLEAN_OR","T_BOOLEAN_AND",
"'|'","'^'","'&'","T_IS_EQUAL","T_IS_NOT_EQUAL","T_IS_IDENTICAL","T_IS_NOT_IDENTICAL",
"'<'","T_IS_SMALLER_OR_EQUAL","'>'","T_IS_GREATER_OR_EQUAL","T_SL","T_SR","'+'",
"'-'","'.'","'*'","'/'","'%'","'!'","T_INSTANCEOF","'~'","T_INC","T_DEC","T_INT_CAST",
"T_DOUBLE_CAST","T_STRING_CAST","T_ARRAY_CAST","T_OBJECT_CAST","T_BOOL_CAST",
"T_UNSET_CAST","'@'","'['","T_NEW","T_CLONE","T_EXIT","T_IF","T_ELSEIF","T_ELSE",
"T_ENDIF","T_LNUMBER","T_DNUMBER","T_STRING","T_STRING_VARNAME","T_VARIABLE",
"T_NUM_STRING","T_INLINE_HTML","T_CHARACTER","T_BAD_CHARACTER","T_ENCAPSED_AND_WHITESPACE",
"T_CONSTANT_ENCAPSED_STRING","T_ECHO","T_DO","T_WHILE","T_ENDWHILE","T_FOR",
"T_ENDFOR","T_FOREACH","T_ENDFOREACH","T_DECLARE","T_ENDDECLARE","T_AS","T_SWITCH",
"T_ENDSWITCH","T_CASE","T_DEFAULT","T_BREAK","T_CONTINUE","T_FUNCTION","T_CONST",
"T_RETURN","T_TRY","T_CATCH","T_THROW","T_USE","T_GLOBAL","T_STATIC","T_ABSTRACT",
"T_FINAL","T_PRIVATE","T_PROTECTED","T_PUBLIC","T_VAR","T_UNSET","T_ISSET","T_EMPTY",
"T_HALT_COMPILER","T_CLASS","T_INTERFACE","T_EXTENDS","T_IMPLEMENTS","T_OBJECT_OPERATOR",
"T_DOUBLE_ARROW","T_LIST","T_ARRAY","T_CLASS_C","T_METHOD_C","T_FUNC_C","T_LINE",
"T_FILE","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","T_CLOSE_TAG","T_START_HEREDOC",
"T_END_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","T_CURLY_OPEN","T_PAAMAYIM_NEKUDOTAYIM",
"';'","'('","')'","'{'","'}'","'$'","']'","top_statement_list","top_statement",
"inner_statement_list","inner_statement_list_with_assignment","inner_statement",
"statement","@1","@2","@3","variable_list","control_structure","@4","@5","@6",
"@7","@8","@9","@10","@11","@12","@13","@14","@15","old_elseif_list","old_else_single",
"elseif_list","@16","else_single","@17","switch_case_list","case_list","case_separator",
"possible_semicolon","foreach_optional_arg","foreach_variable","declare_list",
"empty_or_additional_catch_list","additional_catch_list","additional_catch",
"is_reference","function_declaration","@18","class_declaration","@19","@20",
"class_entry_type","class_extends","implements","interface_extends","string_list",
"empty_or_parameter_list","parameter_list","optional_class_type","empty_or_call_parameter_list",
"call_parameter_list","global_var_list","global_var","static_var_list","class_statement_list",
"class_statement","@21","method_body","variable_modifiers","empty_or_member_modifiers",
"member_modifiers","member_modifier","class_variable_declaration","class_constant_declaration",
"empty_or_expr_list","expr_list","expr_without_variable","@22","assignment",
"cast","operator","function_call","class_name_reference","dynamic_class_name_reference",
"dynamic_class_name_variable_properties","dynamic_class_name_variable_property",
"exit_expr","ctor_arguments","common_scalar","static_scalar","scalar","class_constant",
"empty_or_static_array_pair_list","possible_comma","static_array_pair_list",
"expr","variable","variable_properties","variable_property","method_or_not",
"variable_without_objects","base_variable_with_function_calls","base_variable",
"reference_variable","compound_variable","dim_offset","object_property","object_dim_list",
"variable_name","simple_indirect_reference","assignment_list","assignment_list_element",
"empty_or_array_pair_list","array_pair_list","internal_function",""
};
#endif

static const short yyr1[] = {     0,
   144,   144,   144,   145,   145,   145,   145,   146,   147,   147,
   147,   148,   148,   148,   148,   149,   150,   151,   149,   152,
   149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
   149,   149,   149,   149,   149,   149,   149,   149,   153,   153,
   155,   154,   156,   154,   157,   154,   158,   154,   159,   154,
   160,   154,   161,   154,   162,   154,   163,   154,   164,   154,
   165,   154,   166,   154,   167,   167,   168,   168,   169,   170,
   169,   171,   172,   171,   173,   173,   174,   174,   174,   175,
   175,   176,   176,   177,   177,   178,   178,   179,   179,   180,
   180,   181,   181,   182,   183,   183,   185,   184,   187,   186,
   188,   186,   189,   189,   189,   190,   190,   191,   191,   192,
   192,   193,   193,   194,   194,   195,   195,   195,   195,   195,
   195,   195,   195,   196,   196,   196,   197,   197,   198,   198,
   198,   198,   199,   199,   200,   200,   200,   201,   201,   201,
   201,   202,   202,   203,   203,   204,   203,   205,   205,   206,
   206,   207,   207,   208,   208,   209,   209,   209,   209,   209,
   209,   210,   210,   210,   210,   211,   211,   212,   212,   213,
   213,   214,   214,   214,   214,   214,   214,   214,   214,   214,
   214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
   215,   214,   216,   216,   216,   216,   216,   216,   216,   216,
   216,   216,   216,   216,   217,   217,   217,   217,   217,   217,
   217,   218,   218,   218,   218,   218,   218,   218,   218,   218,
   218,   218,   218,   218,   218,   218,   218,   218,   218,   218,
   218,   218,   218,   218,   218,   218,   218,   218,   218,   219,
   219,   219,   219,   220,   220,   221,   221,   222,   222,   223,
   224,   224,   224,   225,   225,   226,   226,   226,   226,   226,
   226,   226,   226,   227,   227,   227,   227,   227,   227,   228,
   228,   228,   229,   230,   230,   231,   231,   232,   232,   232,
   232,   233,   233,   234,   234,   235,   235,   236,   237,   237,
   238,   238,   239,   239,   240,   240,   240,   241,   241,   241,
   242,   242,   243,   243,   244,   244,   245,   245,   245,   246,
   246,   247,   247,   248,   248,   249,   249,   249,   250,   250,
   251,   251,   251,   251,   251,   251,   251,   251,   252,   252,
   252,   252,   252,   252,   252,   252
};

static const short yyr2[] = {     0,
     0,     5,     2,     1,     1,     1,     4,     1,     0,     5,
     2,     1,     1,     1,     4,     1,     0,     0,     9,     0,
     4,     2,     3,     2,     3,     2,     3,     3,     3,     3,
     1,     3,     1,     2,     1,     1,     5,     3,     1,     3,
     0,    11,     0,     9,     0,     6,     0,    13,     0,    10,
     0,     6,     0,    12,     0,     9,     0,     9,     0,     6,
     0,     8,     0,    14,     0,     7,     0,     3,     0,     0,
     7,     0,     0,     3,     4,     5,     0,     5,     4,     1,
     1,     0,     1,     0,     2,     1,     2,     3,     5,     0,
     1,     1,     2,     8,     0,     1,     0,    10,     0,     8,
     0,     7,     1,     2,     2,     0,     2,     0,     2,     0,
     2,     1,     3,     1,     0,     2,     3,     5,     4,     4,
     5,     7,     6,     0,     1,     1,     0,     1,     1,     2,
     3,     4,     3,     1,     1,     2,     4,     3,     5,     1,
     3,     2,     0,     3,     2,     0,     9,     1,     3,     1,
     1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
     1,     3,     5,     1,     3,     5,     4,     0,     1,     3,
     1,     6,     4,     6,     1,     2,     2,     2,     2,     3,
     2,     1,     3,     3,     5,     1,     1,     1,     2,     2,
     0,     5,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     2,     2,     2,     2,     2,     2,
     2,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     2,     2,     2,     2,     4,
     6,     6,     4,     1,     1,     4,     1,     2,     0,     2,
     0,     2,     3,     0,     3,     1,     1,     1,     1,     1,
     1,     1,     1,     1,     1,     2,     2,     4,     1,     1,
     1,     1,     3,     0,     2,     0,     1,     5,     3,     3,
     1,     1,     1,     5,     1,     2,     0,     3,     3,     0,
     1,     2,     1,     1,     1,     2,     3,     4,     4,     1,
     1,     4,     0,     1,     1,     1,     4,     4,     1,     1,
     3,     1,     2,     3,     1,     0,     1,     4,     0,     2,
     5,     3,     3,     1,     6,     4,     4,     2,     4,     4,
     4,     2,     2,     2,     2,     2
};

static const short yydefact[] = {     1,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   251,     0,   256,   257,   271,   301,    33,
   258,     0,    61,     0,     0,     0,     0,     0,     0,     0,
    95,     0,     0,     0,    36,     0,     0,     0,     0,     0,
     0,     0,     0,   103,     0,     0,     0,   261,   262,   263,
   259,   260,    31,     0,    35,     0,    20,   312,     3,     4,
    16,     5,     6,     0,   283,   175,   187,   182,   294,   270,
   188,   272,     0,   282,     0,   285,   293,   295,   300,     0,
   186,   333,   282,   334,     0,   335,   336,   332,   236,   237,
   238,   239,     0,   177,   179,   205,   206,   207,   208,   209,
   210,   211,   189,   244,   254,   245,   247,   295,     0,   181,
     0,   190,     0,     0,   127,     0,   171,     0,     0,   168,
     0,     0,     0,    22,     0,    24,     0,    96,     0,    26,
     0,    63,     0,   135,     0,     0,   134,   140,     0,   104,
   105,     0,     0,     0,     0,   110,   316,   191,     0,     0,
     9,     0,   106,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,   176,   178,   127,     0,   303,     0,   313,   296,
     0,     0,     0,     0,   127,   180,     0,   296,   252,     0,
     0,   273,   297,   291,     0,     0,     0,   128,   129,     0,
    30,     0,     0,     0,   169,     0,     0,     0,     0,    23,
    25,     0,    27,     9,    38,     0,   136,     0,    28,     0,
     0,    29,     0,    39,     0,     0,     0,     0,     0,     0,
   317,     0,   315,   319,    32,   184,     0,     8,     0,     0,
   108,   227,   229,   228,     0,   225,   226,   212,   214,   213,
   232,   233,   230,   231,   221,   234,   222,   235,   223,   224,
   216,   217,   215,   218,   219,   220,   183,     0,   193,   194,
   195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
     0,   310,     0,   306,   290,   305,   309,   304,     0,     0,
   193,   331,     0,   297,     0,   249,   253,    17,   127,   127,
   292,   130,   240,     0,   170,     0,    45,   168,     0,     0,
     0,    59,    51,   124,     0,     0,   133,     0,     0,   265,
     0,   264,   141,   269,   138,     0,     0,   329,   330,     7,
   112,   111,   101,   316,   316,     0,     0,   324,     0,   276,
    21,     0,    11,    12,    13,    14,   282,   302,   107,     0,
     0,     0,     0,   173,     2,   243,     0,   127,   287,   303,
     0,   298,   299,   255,   246,    41,     0,     0,     0,     0,
   131,     0,    43,     0,     0,     0,    84,    86,    88,     0,
    57,     0,     0,   125,   126,     0,   114,     0,     0,   137,
   266,   267,     0,   274,     0,    40,    37,     0,   143,     0,
   314,     0,   328,     0,   192,   277,   320,     0,     0,   109,
    99,   185,   254,   311,     0,   284,     0,     0,     0,   248,
     9,    18,   241,   242,   132,     0,     9,    46,   168,    87,
     0,     0,     0,     9,    60,    82,    82,    52,     0,   124,
     0,   116,     0,   273,   281,     0,   276,   139,   113,   152,
   318,   172,     0,   323,     0,   322,     0,   193,   143,   174,
   289,     0,   286,   307,   308,   250,    65,    69,     0,     0,
     0,    85,    55,    89,     0,    83,    77,    77,    97,     0,
   117,     0,     0,     0,   268,   277,   275,     0,   159,   160,
   161,   158,   157,   156,   151,   102,   142,     0,     0,   150,
   154,     0,   327,   326,     0,    15,    10,   152,   290,    67,
    72,    62,     0,    49,    53,     0,     0,     0,     0,     9,
     0,   120,     0,   119,     0,   280,   279,     0,   164,     0,
    95,   155,     0,   145,     0,   321,   100,   288,     0,     0,
     0,     0,    73,    19,    44,    47,     0,     9,    56,    58,
     0,     0,     0,    75,     0,   121,     0,   118,     0,     0,
     0,     0,     0,   144,     0,     0,   325,     0,     9,     0,
     0,     0,     9,    50,     0,    76,     0,    80,    81,     9,
    98,     0,   123,     0,   278,   167,   165,   162,     0,     0,
     0,    68,    42,     0,    74,     0,     0,     9,    79,   122,
     9,     0,   124,   166,     0,    70,     0,    54,    78,     0,
   163,     0,     9,     0,    48,    90,   146,    66,    71,     0,
    64,    91,    92,     0,     0,    93,   148,     9,   147,     0,
     0,     0,   149,     0,     9,     0,    94,     0,     0
};

static const short yydefgoto[] = {     1,
    69,   267,   268,   373,    70,   397,   498,   161,   253,    71,
   451,   457,   404,   603,   577,   413,   578,   546,   464,   412,
   128,   244,   540,   571,   541,   644,   574,   602,   468,   548,
   610,   507,   462,   407,   238,   651,   652,   653,   139,    72,
   550,    73,   489,   429,    74,   271,   381,   259,   362,   416,
   417,   418,   227,   228,   146,   147,   149,   480,   527,   654,
   659,   528,   529,   530,   531,   560,   532,   234,   235,    75,
   264,    76,    77,    78,    79,   115,   116,   395,   450,   122,
   216,    80,   353,    81,    82,   476,   437,   477,    83,    93,
   446,   493,   389,    85,    86,    87,    88,    89,   319,   315,
   316,   317,    90,   262,   263,   369,   370,    91
};

static const short yypact[] = {-32768,
   617,  2036,  2036,   -61,  2036,  2036,  2036,  2036,  2036,  2036,
  2036,   -12,   -12,  2036,  2036,  2036,  2036,  2036,  2036,  2036,
  2036,    -4,  2036,   -58,   -55,-32768,-32768,   -65,-32768,-32768,
-32768,  2036,-32768,   -44,   -29,   -16,    10,    66,   978,  1071,
    81,  1164,   -25,  2036,-32768,    -8,    60,    27,    39,    94,
   102,   104,   107,-32768,    86,   115,   117,-32768,-32768,-32768,
-32768,-32768,-32768,  2036,-32768,  2036,-32768,   121,-32768,-32768,
-32768,-32768,-32768,    90,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,  2741,   761,   128,   147,-32768,   -30,-32768,     8,
-32768,  3145,   890,  3145,  2036,  3145,  3145,  3245,    58,    58,
   220,-32768,   -37,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,   134,   136,-32768,   152,   -15,     8,-32768,
  1257,-32768,  2036,   170,  1355,    14,  3145,   875,  2036,  2036,
  2036,   204,  2036,-32768,  2782,-32768,  2823,-32768,   205,-32768,
  2864,-32768,  2905,-32768,    -5,    15,-32768,   264,    71,-32768,
-32768,   -12,   -12,   -12,   140,   162,   160,-32768,    74,  2331,
-32768,  2036,   163,  2036,  2036,  2036,  2036,  2036,  2036,  2036,
  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,
  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,    -4,-32768,
  1453,  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,  2036,
  2036,  2036,-32768,-32768,  1355,    -1,  2036,  2036,   121,   -20,
  1453,  2372,   183,   149,  1355,-32768,    -1,   -15,-32768,  2413,
  2454,   145,   146,   -15,     8,   -12,   148,   277,  3145,  2036,
-32768,   207,  2495,   153,   284,  3060,   280,    17,  2536,-32768,
-32768,   156,-32768,-32768,-32768,  2036,-32768,    -8,-32768,   194,
   224,-32768,    19,-32768,    20,   159,   164,   228,   173,   172,
-32768,    48,-32768,  1551,-32768,-32768,   174,   746,  2092,   229,
   195,  3185,  3222,  3245,  3102,  3290,  1308,  1405,  1502,  1599,
  1697,  1697,  1697,  1697,   545,   545,   545,   545,    42,    42,
    58,    58,    58,   220,   220,   220,-32768,   -18,   521,  3245,
  3245,  3245,  3245,  3245,  3245,  3245,  3245,  3245,  3245,  3245,
   187,-32768,  2036,-32768,   196,   -14,-32768,  3145,   186,  2156,
  3245,-32768,   145,-32768,   192,-32768,-32768,   307,  1355,  1355,
   -15,-32768,-32768,  1649,  3145,   197,   311,  2036,     5,   194,
   267,   314,-32768,   -23,   200,  2207,-32768,   194,   194,   209,
   208,-32768,-32768,-32768,   330,   -12,   210,-32768,-32768,-32768,
-32768,   340,-32768,   160,   160,   343,   -12,  2946,   218,   351,
-32768,   223,-32768,-32768,-32768,-32768,  1045,-32768,-32768,   228,
   230,  2036,    -4,-32768,-32768,-32768,  2249,  1355,-32768,  2036,
  2036,-32768,-32768,-32768,   243,-32768,   875,   232,   235,   -12,
  3145,  2036,-32768,   875,   231,   -12,   254,-32768,-32768,   364,
-32768,   875,     6,-32768,-32768,   239,   371,    23,   281,-32768,
-32768,-32768,   310,   194,   194,-32768,-32768,   312,-32768,    49,
-32768,  2036,-32768,  1747,-32768,  1845,-32768,   246,  1453,   340,
-32768,  3268,   136,-32768,   248,   270,   241,  2290,    -1,-32768,
-32768,-32768,-32768,-32768,-32768,  2577,-32768,-32768,  2036,-32768,
     5,   252,   194,-32768,-32768,   256,   256,-32768,   258,   -26,
   326,   389,   265,-32768,   285,   266,   399,-32768,-32768,   198,
-32768,  3245,   -12,  3145,   -12,  2987,   271,  3016,-32768,-32768,
-32768,    -1,-32768,-32768,-32768,-32768,-32768,-32768,   273,   329,
   275,-32768,   390,-32768,   328,-32768,-32768,-32768,-32768,    29,
   406,   194,   350,   194,-32768,   194,-32768,   352,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,   349,   331,   245,
-32768,    84,-32768,-32768,  1943,-32768,-32768,   387,   196,   191,
   193,-32768,   288,   407,-32768,   875,   298,   157,   -43,-32768,
   363,   425,   194,-32768,   366,-32768,   319,   428,   431,    87,
    81,-32768,   374,-32768,   -12,  3145,-32768,-32768,   308,   421,
   382,   315,-32768,-32768,-32768,-32768,   875,-32768,-32768,-32768,
   317,  2036,     7,-32768,   318,   442,   194,-32768,   321,   194,
   194,   194,   383,-32768,   392,   445,-32768,  2036,-32768,   327,
  2036,   875,-32768,-32768,   378,-32768,  2700,-32768,-32768,-32768,
-32768,   194,-32768,   332,-32768,-32768,-32768,   453,   333,   194,
  2618,-32768,-32768,  2659,-32768,   384,   336,-32768,-32768,-32768,
-32768,   194,   -23,-32768,   441,-32768,   337,-32768,-32768,   334,
-32768,   338,-32768,   875,-32768,   377,-32768,-32768,-32768,   341,
-32768,   377,-32768,   -88,   409,-32768,-32768,-32768,-32768,   410,
   347,   345,-32768,   342,-32768,   358,-32768,   500,-32768
};

static const short yypgoto[] = {-32768,
-32768,  -234,-32768,-32768,  -126,-32768,-32768,-32768,   348,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    -6,
  -104,    38,-32768,    45,-32768,-32768,-32768,  -145,   -53,   242,
-32768,   244,-32768,-32768,-32768,-32768,-32768,-32768,   129,  -119,
-32768,    46,  -176,-32768,-32768,   269,-32768,    31,-32768,-32768,
-32768,-32768,-32768,-32768,    -9,-32768,-32768,  -327,    26,-32768,
-32768,-32768,-32768,-32768,-32768,  -163,-32768,-32768,-32768,-32768,
    72,  -101,    24,-32768,    18,-32768,    47,-32768,    -2,    62,
-32768,-32768,   -17,  -100,-32768,    13,    21,-32768,   135,  -197,
-32768,-32768,    12,   165,   161,-32768,-32768,-32768
};


#define	YYLAST		3339


static const short yytable[] = {    92,
    94,   232,    96,    97,    98,    99,   100,   101,   102,   345,
   405,   106,   107,   108,   109,   110,   111,   112,   113,   326,
   120,   230,   248,   223,   341,   297,   356,   356,   311,   127,
   207,   466,   608,   119,   117,   406,   135,   137,   325,   141,
   207,   143,   118,   383,   414,   207,   390,   414,   657,   582,
   583,   658,   103,   471,    29,   365,   365,   126,   103,   551,
    29,   127,    84,   160,   144,   103,   114,    29,    29,   312,
   124,    29,   125,   104,   105,   103,    95,    29,   251,   121,
    29,   230,   123,   183,   184,   185,   186,   187,   188,   159,
   189,   563,   212,   129,   593,   472,   415,   584,   213,   415,
   125,   552,   186,   187,   188,   314,   189,  -291,   130,   208,
   210,   138,   223,   324,   142,  -115,   314,  -292,   220,   208,
   221,   131,   229,    68,   208,   391,   233,   127,   236,    68,
   239,   501,   148,   145,   246,   225,    68,    68,   313,   218,
    68,   374,   150,   609,   224,   467,    68,   132,   352,   209,
   231,   249,   398,   399,   151,   342,   156,   357,   358,   269,
   163,   272,   273,   274,   275,   276,   277,   278,   279,   280,
   281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
   291,   292,   293,   294,   295,   296,   366,   481,   299,   300,
   301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
   119,   117,   229,   133,   318,   320,   247,   252,   321,   118,
   265,   445,   229,   254,   254,   256,   497,   225,   261,   443,
   564,    29,   500,   594,   225,   225,   224,   335,   225,   505,
   103,   152,    29,   224,   224,   348,   349,   224,   352,   153,
   222,   154,    29,   346,   155,   331,   352,   352,   581,   582,
   583,   496,   157,   323,   158,    29,   569,   570,   572,   573,
   162,   368,    26,    27,   350,   205,   206,   354,   189,   214,
   452,   217,    31,   215,   237,   242,   250,   458,   257,   258,
   270,   260,   329,   330,   334,   465,   333,   332,   336,   338,
    68,   230,   340,   344,   539,   518,   355,   359,   361,   379,
   360,    68,   519,   520,   521,   522,   523,   524,   525,   364,
   387,    68,   363,   380,   371,   585,   351,    58,    59,    60,
    61,    62,   352,   352,    68,   386,   229,   229,   392,   377,
   394,   401,   396,   388,   402,   127,   403,   410,   526,   411,
   419,  -153,   425,   605,   423,   424,   427,   428,   314,   519,
   520,   521,   522,   523,   524,   432,   435,   354,   436,   384,
   438,   352,   449,   409,   622,   354,   354,   459,   626,   441,
   453,   421,   422,   454,   461,   629,   463,   469,   470,   442,
   474,   473,   479,   494,   487,   229,   491,   318,   448,   492,
   503,   314,   506,   639,   119,   117,   640,   509,   511,   456,
   408,   512,   513,   118,   515,   514,   516,   536,   648,   542,
   352,   543,   352,   544,   352,   545,   547,   426,   553,   579,
   555,   559,   558,   661,   575,   261,   261,   561,   433,   482,
   666,   484,   576,   486,   580,   586,   488,   587,   589,   590,
   591,   354,   354,   592,   596,   598,   599,   475,   478,   600,
   604,   352,   601,   606,   612,   618,   127,   620,   611,   614,
   225,   455,   619,   623,   627,   632,   643,   460,   637,   224,
   633,   631,   638,   645,   646,   625,   647,   650,   655,   660,
   354,   665,   662,   664,   518,   352,   504,   663,   352,   352,
   352,   519,   520,   521,   522,   523,   524,   525,   667,   669,
   255,   549,   628,   225,   508,   502,   656,   595,   440,   375,
   352,   376,   224,   642,   490,   510,   347,   649,   352,   538,
   562,   568,   408,   517,   447,   431,     0,   567,   430,   354,
   352,   354,   566,   354,     0,   554,     0,   556,     0,   557,
     0,     0,     0,     0,   533,   167,   534,   168,   169,   170,
   171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
   181,   182,   183,   184,   185,   186,   187,   188,     0,   189,
   354,     0,     0,     0,     0,     0,   588,     0,     0,   607,
-32768,-32768,-32768,-32768,   181,   182,   183,   184,   185,   186,
   187,   188,     0,   189,     0,   621,     0,     0,   624,     0,
     0,     0,     0,     0,   354,     0,     0,   354,   354,   354,
   613,     0,     0,   615,   616,   617,   668,     0,     0,     2,
     3,     4,     5,     6,     0,     0,   597,     0,     7,   354,
     0,     0,     0,     0,     0,   630,     0,   354,     0,     0,
     0,     0,     0,   634,     0,     0,     0,     0,     0,   354,
     0,     0,     0,     0,     0,   641,     0,   385,     8,     9,
     0,     0,     0,     0,    10,     0,    11,    12,    13,    14,
    15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
    24,    25,     0,     0,     0,    26,    27,    28,     0,    29,
     0,    30,     0,     0,     0,    31,    32,    33,    34,     0,
    35,     0,    36,     0,    37,     0,     0,    38,     0,     0,
     0,    39,    40,    41,     0,    42,    43,     0,    44,    45,
    46,    47,    48,    49,     0,     0,     0,     0,    50,    51,
    52,    53,    54,    55,     0,     0,     0,     0,    56,    57,
    58,    59,    60,    61,    62,    63,    64,     0,     2,     3,
     4,     5,     6,    65,    66,     0,    67,     7,    68,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   191,   192,   193,   194,   195,   196,   197,
   198,   199,   200,   201,   202,     0,     0,     8,     9,     0,
     0,     0,     0,    10,     0,    11,    12,    13,    14,    15,
    16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
    25,   203,   204,     0,    26,    27,    28,     0,    29,     0,
    30,     0,     0,     0,    31,    32,    33,    34,     0,    35,
     0,    36,     0,    37,     0,     0,    38,     0,     0,     0,
    39,    40,    41,     0,    42,    43,     0,    44,    45,    46,
    47,    48,    49,     0,     0,     0,     0,    50,    51,    52,
   372,    54,    55,     0,     0,     0,     0,    56,    57,    58,
    59,    60,    61,    62,    63,    64,     0,     2,     3,     4,
     5,     6,    65,    66,     0,    67,     7,    68,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,   211,   192,   193,   194,   195,   196,   197,   198,
   199,   200,   201,   202,     0,     0,     8,     9,     0,     0,
     0,     0,    10,     0,    11,    12,    13,    14,    15,    16,
    17,    18,    19,    20,    21,     0,    22,    23,    24,    25,
   203,   204,     0,    26,    27,    28,     0,    29,     0,    30,
     0,     0,     0,    31,    32,    33,    34,     0,    35,     0,
    36,     0,    37,     0,     0,    38,     0,     0,     0,    39,
    40,     0,     0,    42,    43,     0,    44,    45,    46,    47,
     2,     3,     4,     5,     6,     0,    50,    51,    52,     7,
     0,     0,     0,     0,     0,     0,    56,    57,    58,    59,
    60,    61,    62,    63,    64,     0,     0,     0,     0,     0,
     0,    65,    66,     0,    67,     0,    68,     0,     0,     8,
     9,     0,     0,     0,     0,    10,     0,    11,    12,    13,
    14,    15,    16,    17,    18,    19,    20,    21,     0,    22,
    23,    24,     0,     0,     0,     0,    26,    27,    28,     0,
    29,     0,     0,     0,     0,     0,    31,   439,   192,   193,
   194,   195,   196,   197,   198,   199,   200,   201,   202,     0,
     0,     0,     0,     2,     3,     4,     5,     6,     0,     0,
     0,     0,     7,     0,     0,     0,     0,     0,     0,     0,
    51,    52,     0,     0,     0,   203,   204,     0,     0,    56,
    57,    58,    59,    60,    61,    62,     0,     0,     0,     0,
     0,     0,     8,     9,   134,    66,     0,     0,    10,    68,
    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    21,     0,    22,    23,    24,     0,     0,     0,     0,    26,
    27,    28,     0,    29,     0,     0,     0,     0,     0,    31,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     2,     3,     4,     5,
     6,     0,     0,     0,     0,     7,     0,     0,     0,     0,
     0,     0,     0,    51,    52,     0,     0,     0,     0,     0,
     0,     0,    56,    57,    58,    59,    60,    61,    62,     0,
     0,     0,     0,     0,     0,     8,     9,   136,    66,     0,
     0,    10,    68,    11,    12,    13,    14,    15,    16,    17,
    18,    19,    20,    21,     0,    22,    23,    24,     0,     0,
     0,     0,    26,    27,    28,     0,    29,     0,     0,     0,
     0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     2,
     3,     4,     5,     6,     0,     0,     0,     0,     7,     0,
     0,     0,     0,     0,     0,     0,    51,    52,     0,     0,
     0,     0,     0,     0,     0,    56,    57,    58,    59,    60,
    61,    62,     0,     0,     0,     0,     0,     0,     8,     9,
   140,    66,     0,     0,    10,    68,    11,    12,    13,    14,
    15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
    24,     0,     0,     0,     0,    26,    27,    28,     0,    29,
     0,     0,     0,     0,     0,    31,   170,   171,   172,   173,
   174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
   184,   185,   186,   187,   188,     0,   189,     2,     3,     4,
     5,     6,     0,     0,     0,     0,     7,     0,     0,    51,
    52,     0,     0,     0,     0,     0,     0,     0,    56,    57,
    58,    59,    60,    61,    62,   226,     0,     0,     0,     0,
     0,     0,     0,     0,    66,   219,     8,     9,    68,     0,
     0,     0,    10,     0,    11,    12,    13,    14,    15,    16,
    17,    18,    19,    20,    21,     0,    22,    23,    24,     0,
     0,     0,     0,    26,    27,    28,     0,    29,     0,     0,
     0,     0,     0,    31,   171,   172,   173,   174,   175,   176,
   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
   187,   188,     0,   189,     0,     2,     3,     4,     5,     6,
     0,     0,     0,     0,     7,     0,     0,    51,    52,     0,
     0,     0,     0,     0,     0,     0,    56,    57,    58,    59,
    60,    61,    62,   298,     0,     0,     0,     0,     0,     0,
     0,     0,    66,     0,     8,     9,    68,     0,     0,     0,
    10,     0,    11,    12,    13,    14,    15,    16,    17,    18,
    19,    20,    21,     0,    22,    23,    24,     0,     0,     0,
     0,    26,    27,    28,     0,    29,     0,     0,     0,     0,
     0,    31,   172,   173,   174,   175,   176,   177,   178,   179,
   180,   181,   182,   183,   184,   185,   186,   187,   188,     0,
   189,     0,     0,     2,     3,     4,     5,     6,     0,     0,
     0,     0,     7,     0,     0,    51,    52,     0,     0,     0,
     0,     0,     0,     0,    56,    57,    58,    59,    60,    61,
    62,   367,     0,     0,     0,     0,     0,     0,     0,     0,
    66,     0,     8,     9,    68,     0,     0,     0,    10,     0,
    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    21,     0,    22,    23,    24,     0,     0,     0,     0,    26,
    27,    28,     0,    29,     0,     0,     0,     0,     0,    31,
   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
   183,   184,   185,   186,   187,   188,     0,   189,     0,     0,
     0,     2,     3,     4,     5,     6,     0,     0,     0,     0,
     7,     0,     0,    51,    52,     0,     0,     0,     0,     0,
     0,     0,    56,    57,    58,    59,    60,    61,    62,   400,
     0,     0,     0,     0,     0,     0,     0,     0,    66,     0,
     8,     9,    68,     0,     0,     0,    10,     0,    11,    12,
    13,    14,    15,    16,    17,    18,    19,    20,    21,     0,
    22,    23,    24,     0,     0,     0,     0,    26,    27,    28,
     0,    29,     0,     0,     0,     0,     0,    31,-32768,-32768,
-32768,-32768,   177,   178,   179,   180,   181,   182,   183,   184,
   185,   186,   187,   188,     0,   189,     0,     0,     0,     2,
     3,     4,     5,     6,     0,     0,     0,     0,     7,     0,
     0,    51,    52,     0,     0,     0,     0,     0,     0,     0,
    56,    57,    58,    59,    60,    61,    62,   483,     0,     0,
     0,     0,     0,     0,     0,     0,    66,     0,     8,     9,
    68,     0,     0,     0,    10,     0,    11,    12,    13,    14,
    15,    16,    17,    18,    19,    20,    21,     0,    22,    23,
    24,     0,     0,     0,     0,    26,    27,    28,     0,    29,
     0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     2,     3,     4,
     5,     6,     0,     0,     0,     0,     7,     0,     0,    51,
    52,     0,     0,     0,     0,     0,     0,     0,    56,    57,
    58,    59,    60,    61,    62,   485,     0,     0,     0,     0,
     0,     0,     0,     0,    66,     0,     8,     9,    68,     0,
     0,     0,    10,     0,    11,    12,    13,    14,    15,    16,
    17,    18,    19,    20,    21,     0,    22,    23,    24,     0,
     0,     0,     0,    26,    27,    28,     0,    29,     0,     0,
     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     2,     3,     4,     5,     6,
     0,     0,     0,     0,     7,     0,     0,    51,    52,     0,
     0,     0,     0,     0,     0,     0,    56,    57,    58,    59,
    60,    61,    62,   565,     0,     0,     0,     0,     0,     0,
     0,     0,    66,     0,     8,     9,    68,     0,     0,     0,
    10,     0,    11,    12,    13,    14,    15,    16,    17,    18,
    19,    20,    21,     0,    22,    23,    24,     0,     0,     0,
     0,    26,    27,    28,     0,    29,     0,     0,     0,     0,
     0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     2,     3,
     4,     5,     6,     0,     0,     0,     0,     7,     0,     0,
     0,     0,     0,     0,     0,    51,    52,     0,     0,     0,
     0,     0,     0,     0,    56,    57,    58,    59,    60,    61,
    62,     0,     0,     0,     0,     0,     0,     8,     9,     0,
    66,     0,     0,    10,    68,    11,    12,    13,    14,    15,
    16,    17,    18,    19,    20,    21,     0,    22,    23,    24,
   164,   165,   166,     0,    26,    27,    28,     0,    29,     0,
     0,     0,     0,     0,    31,     0,   167,     0,   168,   169,
   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
   180,   181,   182,   183,   184,   185,   186,   187,   188,     0,
   189,     0,     0,     0,     0,     0,     0,     0,    51,    52,
     0,     0,     0,     0,     0,     0,     0,    56,    57,    58,
    59,    60,    61,    62,   164,   165,   166,     0,     0,     0,
     0,     0,     0,    66,     0,     0,     0,    68,     0,     0,
   167,     0,   168,   169,   170,   171,   172,   173,   174,   175,
   176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
   186,   187,   188,     0,   189,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,   164,   165,   166,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,   167,   378,   168,   169,   170,   171,   172,   173,   174,
   175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
   185,   186,   187,   188,     0,   189,     0,   164,   165,   166,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   167,     0,   168,   169,   170,   171,   172,
   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
   183,   184,   185,   186,   187,   188,   393,   189,   164,   165,
   166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   167,     0,   168,   169,   170,   171,
   172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
   182,   183,   184,   185,   186,   187,   188,     0,   189,   164,
   165,   166,     0,     0,     0,     0,     0,   420,     0,     0,
     0,     0,     0,     0,     0,   167,     0,   168,   169,   170,
   171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
   181,   182,   183,   184,   185,   186,   187,   188,     0,   189,
   164,   165,   166,     0,     0,     0,     0,     0,     0,   444,
     0,     0,     0,     0,     0,     0,   167,     0,   168,   169,
   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
   180,   181,   182,   183,   184,   185,   186,   187,   188,     0,
   189,   164,   165,   166,     0,     0,     0,     0,     0,     0,
   495,     0,     0,     0,     0,     0,     0,   167,     0,   168,
   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
   179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
     0,   189,   164,   165,   166,     0,     0,     0,     0,   266,
     0,     0,     0,     0,     0,     0,     0,     0,   167,     0,
   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
   188,     0,   189,   164,   165,   166,     0,     0,     0,     0,
   322,     0,     0,     0,     0,     0,     0,     0,     0,   167,
     0,   168,   169,   170,   171,   172,   173,   174,   175,   176,
   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
   187,   188,     0,   189,   164,   165,   166,     0,     0,     0,
     0,   327,     0,     0,     0,     0,     0,     0,     0,     0,
   167,     0,   168,   169,   170,   171,   172,   173,   174,   175,
   176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
   186,   187,   188,     0,   189,   164,   165,   166,     0,     0,
     0,     0,   328,     0,     0,     0,     0,     0,     0,     0,
     0,   167,     0,   168,   169,   170,   171,   172,   173,   174,
   175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
   185,   186,   187,   188,     0,   189,   164,   165,   166,     0,
     0,     0,     0,   337,     0,     0,     0,     0,     0,     0,
     0,     0,   167,     0,   168,   169,   170,   171,   172,   173,
   174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
   184,   185,   186,   187,   188,     0,   189,   164,   165,   166,
     0,     0,     0,     0,   343,     0,     0,     0,     0,     0,
     0,     0,     0,   167,     0,   168,   169,   170,   171,   172,
   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
   183,   184,   185,   186,   187,   188,     0,   189,   164,   165,
   166,     0,     0,     0,     0,   499,     0,     0,     0,     0,
     0,     0,     0,     0,   167,   608,   168,   169,   170,   171,
   172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
   182,   183,   184,   185,   186,   187,   188,     0,   189,   164,
   165,   166,     0,     0,     0,     0,   635,     0,     0,     0,
     0,     0,     0,     0,     0,   167,     0,   168,   169,   170,
   171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
   181,   182,   183,   184,   185,   186,   187,   188,     0,   189,
   164,   165,   166,     0,     0,     0,     0,   636,     0,     0,
     0,     0,     0,     0,     0,     0,   167,     0,   168,   169,
   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
   180,   181,   182,   183,   184,   185,   186,   187,   188,     0,
   189,   164,   165,   166,     0,     0,   609,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,   167,     0,   168,
   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
   179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
     0,   189,   164,   165,   166,     0,     0,   190,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,   167,     0,
   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
   188,     0,   189,   164,   165,   166,     0,     0,   240,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   167,
     0,   168,   169,   170,   171,   172,   173,   174,   175,   176,
   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
   187,   188,     0,   189,   164,   165,   166,     0,     0,   241,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   167,     0,   168,   169,   170,   171,   172,   173,   174,   175,
   176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
   186,   187,   188,     0,   189,   164,   165,   166,     0,     0,
   243,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,   167,     0,   168,   169,   170,   171,   172,   173,   174,
   175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
   185,   186,   187,   188,     0,   189,     0,     0,     0,     0,
   167,   245,   168,   169,   170,   171,   172,   173,   174,   175,
   176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
   186,   187,   188,     0,   189,     0,   434,     0,   164,   165,
   166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   167,     0,   168,   169,   170,   171,
   172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
   182,   183,   184,   185,   186,   187,   188,   535,   189,     0,
   164,   165,   166,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,   167,   382,   168,   169,
   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
   180,   181,   182,   183,   184,   185,   186,   187,   188,   339,
   189,     0,   537,   164,   165,   166,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   167,
     0,   168,   169,   170,   171,   172,   173,   174,   175,   176,
   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
   187,   188,     0,   189,   165,   166,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   167,
     0,   168,   169,   170,   171,   172,   173,   174,   175,   176,
   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
   187,   188,   166,   189,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,   167,     0,   168,   169,
   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
   180,   181,   182,   183,   184,   185,   186,   187,   188,   167,
   189,   168,   169,   170,   171,   172,   173,   174,   175,   176,
   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
   187,   188,     0,   189,   168,   169,   170,   171,   172,   173,
   174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
   184,   185,   186,   187,   188,     0,   189,   169,   170,   171,
   172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
   182,   183,   184,   185,   186,   187,   188,     0,   189
};

static const short yycheck[] = {     2,
     3,   128,     5,     6,     7,     8,     9,    10,    11,   244,
   338,    14,    15,    16,    17,    18,    19,    20,    21,   217,
    23,     8,     8,   124,     8,   189,     8,     8,   205,    32,
    61,    26,    26,    22,    22,    31,    39,    40,   215,    42,
    61,    44,    22,    62,    71,    61,    61,    71,   137,    93,
    94,   140,    71,    31,    73,     8,     8,    32,    71,    31,
    73,    64,     1,    66,    73,    71,    71,    73,    73,    71,
   136,    73,   138,    12,    13,    71,   138,    73,     8,   138,
    73,     8,   138,    42,    43,    44,    45,    46,    47,    64,
    49,     8,    95,   138,     8,    73,   123,   141,   136,   123,
   138,    73,    45,    46,    47,   206,    49,   138,   138,   140,
    90,    31,   213,   214,   140,   139,   217,   138,   121,   140,
   123,   138,   125,   142,   140,   140,   129,   130,   131,   142,
   133,   459,    73,   142,   140,   124,   142,   142,   140,   119,
   142,   268,   116,   137,   124,   140,   142,   138,   250,   142,
   137,   137,   329,   330,   116,   139,    71,   139,   139,   162,
    71,   164,   165,   166,   167,   168,   169,   170,   171,   172,
   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
   183,   184,   185,   186,   187,   188,   139,   139,   191,   192,
   193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
   189,   189,   205,   138,   207,   208,   145,   137,   211,   189,
   137,   388,   215,   152,   153,   154,   451,   206,   157,   383,
   137,    73,   457,   137,   213,   214,   206,   230,   217,   464,
    71,   138,    73,   213,   214,    42,    43,   217,   340,   138,
    71,   138,    73,   246,   138,   225,   348,   349,    92,    93,
    94,   449,   138,    71,   138,    73,    66,    67,    66,    67,
   140,   264,    69,    70,    71,   138,   120,   250,    49,   136,
   397,   120,    79,   138,    71,    71,    13,   404,   139,   118,
   118,   122,   138,   138,     8,   412,   139,   226,    82,   137,
   142,     8,    13,   138,   492,    98,    73,   139,    71,    71,
   137,   142,   105,   106,   107,   108,   109,   110,   111,   138,
   313,   142,   140,   119,   141,   550,   123,   124,   125,   126,
   127,   128,   424,   425,   142,   139,   329,   330,   143,   268,
   139,   334,    26,   138,   138,   338,    26,    71,   141,    26,
   141,    97,    13,   578,   136,   138,   137,     8,   449,   105,
   106,   107,   108,   109,   110,    13,   139,   340,     8,   298,
   138,   463,   120,   340,   599,   348,   349,   137,   603,   140,
   139,   348,   349,   139,   121,   610,    13,   139,     8,   382,
    71,   101,    71,   143,   139,   388,   139,   390,   391,   120,
   139,   492,   137,   628,   383,   383,   631,   140,    73,   402,
   339,    13,   138,   383,   139,   121,     8,   137,   643,   137,
   512,    83,   514,   139,   516,    26,    89,   356,    13,   546,
    71,    73,    71,   658,   137,   364,   365,    97,   367,   432,
   665,   434,    26,   436,   137,    73,   439,    13,    73,   121,
    13,   424,   425,    13,    71,   138,    26,   424,   425,    68,
   577,   553,   138,   137,    13,    73,   459,    13,   141,   139,
   449,   400,    71,   137,    87,    13,    26,   406,    85,   449,
   138,   140,   137,   137,   141,   602,   139,   101,   138,    71,
   463,   140,    73,   139,    98,   587,   463,   141,   590,   591,
   592,   105,   106,   107,   108,   109,   110,   111,   141,     0,
   153,   508,   607,   492,   467,   461,   652,   561,   380,   268,
   612,   268,   492,   633,   443,   470,   248,   644,   620,   489,
   530,   539,   461,   477,   390,   365,    -1,   141,   364,   512,
   632,   514,   535,   516,    -1,   512,    -1,   514,    -1,   516,
    -1,    -1,    -1,    -1,   483,    25,   485,    27,    28,    29,
    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
    40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
   553,    -1,    -1,    -1,    -1,    -1,   553,    -1,    -1,   582,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    -1,    49,    -1,   598,    -1,    -1,   601,    -1,
    -1,    -1,    -1,    -1,   587,    -1,    -1,   590,   591,   592,
   587,    -1,    -1,   590,   591,   592,     0,    -1,    -1,     3,
     4,     5,     6,     7,    -1,    -1,   565,    -1,    12,   612,
    -1,    -1,    -1,    -1,    -1,   612,    -1,   620,    -1,    -1,
    -1,    -1,    -1,   620,    -1,    -1,    -1,    -1,    -1,   632,
    -1,    -1,    -1,    -1,    -1,   632,    -1,   137,    42,    43,
    -1,    -1,    -1,    -1,    48,    -1,    50,    51,    52,    53,
    54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
    64,    65,    -1,    -1,    -1,    69,    70,    71,    -1,    73,
    -1,    75,    -1,    -1,    -1,    79,    80,    81,    82,    -1,
    84,    -1,    86,    -1,    88,    -1,    -1,    91,    -1,    -1,
    -1,    95,    96,    97,    -1,    99,   100,    -1,   102,   103,
   104,   105,   106,   107,    -1,    -1,    -1,    -1,   112,   113,
   114,   115,   116,   117,    -1,    -1,    -1,    -1,   122,   123,
   124,   125,   126,   127,   128,   129,   130,    -1,     3,     4,
     5,     6,     7,   137,   138,    -1,   140,    12,   142,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    13,    14,    15,    16,    17,    18,    19,
    20,    21,    22,    23,    24,    -1,    -1,    42,    43,    -1,
    -1,    -1,    -1,    48,    -1,    50,    51,    52,    53,    54,
    55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
    65,    51,    52,    -1,    69,    70,    71,    -1,    73,    -1,
    75,    -1,    -1,    -1,    79,    80,    81,    82,    -1,    84,
    -1,    86,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,
    95,    96,    97,    -1,    99,   100,    -1,   102,   103,   104,
   105,   106,   107,    -1,    -1,    -1,    -1,   112,   113,   114,
   115,   116,   117,    -1,    -1,    -1,    -1,   122,   123,   124,
   125,   126,   127,   128,   129,   130,    -1,     3,     4,     5,
     6,     7,   137,   138,    -1,   140,    12,   142,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
    21,    22,    23,    24,    -1,    -1,    42,    43,    -1,    -1,
    -1,    -1,    48,    -1,    50,    51,    52,    53,    54,    55,
    56,    57,    58,    59,    60,    -1,    62,    63,    64,    65,
    51,    52,    -1,    69,    70,    71,    -1,    73,    -1,    75,
    -1,    -1,    -1,    79,    80,    81,    82,    -1,    84,    -1,
    86,    -1,    88,    -1,    -1,    91,    -1,    -1,    -1,    95,
    96,    -1,    -1,    99,   100,    -1,   102,   103,   104,   105,
     3,     4,     5,     6,     7,    -1,   112,   113,   114,    12,
    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
   126,   127,   128,   129,   130,    -1,    -1,    -1,    -1,    -1,
    -1,   137,   138,    -1,   140,    -1,   142,    -1,    -1,    42,
    43,    -1,    -1,    -1,    -1,    48,    -1,    50,    51,    52,
    53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
    63,    64,    -1,    -1,    -1,    -1,    69,    70,    71,    -1,
    73,    -1,    -1,    -1,    -1,    -1,    79,    13,    14,    15,
    16,    17,    18,    19,    20,    21,    22,    23,    24,    -1,
    -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
    -1,    -1,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
   113,   114,    -1,    -1,    -1,    51,    52,    -1,    -1,   122,
   123,   124,   125,   126,   127,   128,    -1,    -1,    -1,    -1,
    -1,    -1,    42,    43,   137,   138,    -1,    -1,    48,   142,
    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,    69,
    70,    71,    -1,    73,    -1,    -1,    -1,    -1,    -1,    79,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
     7,    -1,    -1,    -1,    -1,    12,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,   122,   123,   124,   125,   126,   127,   128,    -1,
    -1,    -1,    -1,    -1,    -1,    42,    43,   137,   138,    -1,
    -1,    48,   142,    50,    51,    52,    53,    54,    55,    56,
    57,    58,    59,    60,    -1,    62,    63,    64,    -1,    -1,
    -1,    -1,    69,    70,    71,    -1,    73,    -1,    -1,    -1,
    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
     4,     5,     6,     7,    -1,    -1,    -1,    -1,    12,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,   113,   114,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
   127,   128,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
   137,   138,    -1,    -1,    48,   142,    50,    51,    52,    53,
    54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
    64,    -1,    -1,    -1,    -1,    69,    70,    71,    -1,    73,
    -1,    -1,    -1,    -1,    -1,    79,    29,    30,    31,    32,
    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
    43,    44,    45,    46,    47,    -1,    49,     3,     4,     5,
     6,     7,    -1,    -1,    -1,    -1,    12,    -1,    -1,   113,
   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
   124,   125,   126,   127,   128,    31,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,   138,   139,    42,    43,   142,    -1,
    -1,    -1,    48,    -1,    50,    51,    52,    53,    54,    55,
    56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
    -1,    -1,    -1,    69,    70,    71,    -1,    73,    -1,    -1,
    -1,    -1,    -1,    79,    30,    31,    32,    33,    34,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    -1,    49,    -1,     3,     4,     5,     6,     7,
    -1,    -1,    -1,    -1,    12,    -1,    -1,   113,   114,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
   126,   127,   128,    31,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,   138,    -1,    42,    43,   142,    -1,    -1,    -1,
    48,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
    58,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
    -1,    69,    70,    71,    -1,    73,    -1,    -1,    -1,    -1,
    -1,    79,    31,    32,    33,    34,    35,    36,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
    49,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
    -1,    -1,    12,    -1,    -1,   113,   114,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
   128,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
   138,    -1,    42,    43,   142,    -1,    -1,    -1,    48,    -1,
    50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,    69,
    70,    71,    -1,    73,    -1,    -1,    -1,    -1,    -1,    79,
    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
    42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
    12,    -1,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,   122,   123,   124,   125,   126,   127,   128,    31,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,
    42,    43,   142,    -1,    -1,    -1,    48,    -1,    50,    51,
    52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
    62,    63,    64,    -1,    -1,    -1,    -1,    69,    70,    71,
    -1,    73,    -1,    -1,    -1,    -1,    -1,    79,    32,    33,
    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,     3,
     4,     5,     6,     7,    -1,    -1,    -1,    -1,    12,    -1,
    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
   122,   123,   124,   125,   126,   127,   128,    31,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,    42,    43,
   142,    -1,    -1,    -1,    48,    -1,    50,    51,    52,    53,
    54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
    64,    -1,    -1,    -1,    -1,    69,    70,    71,    -1,    73,
    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
     6,     7,    -1,    -1,    -1,    -1,    12,    -1,    -1,   113,
   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
   124,   125,   126,   127,   128,    31,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,   138,    -1,    42,    43,   142,    -1,
    -1,    -1,    48,    -1,    50,    51,    52,    53,    54,    55,
    56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
    -1,    -1,    -1,    69,    70,    71,    -1,    73,    -1,    -1,
    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
    -1,    -1,    -1,    -1,    12,    -1,    -1,   113,   114,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
   126,   127,   128,    31,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,   138,    -1,    42,    43,   142,    -1,    -1,    -1,
    48,    -1,    50,    51,    52,    53,    54,    55,    56,    57,
    58,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
    -1,    69,    70,    71,    -1,    73,    -1,    -1,    -1,    -1,
    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
     5,     6,     7,    -1,    -1,    -1,    -1,    12,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,   113,   114,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
   128,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,
   138,    -1,    -1,    48,   142,    50,    51,    52,    53,    54,
    55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
     9,    10,    11,    -1,    69,    70,    71,    -1,    73,    -1,
    -1,    -1,    -1,    -1,    79,    -1,    25,    -1,    27,    28,
    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,   114,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
   125,   126,   127,   128,     9,    10,    11,    -1,    -1,    -1,
    -1,    -1,    -1,   138,    -1,    -1,    -1,   142,    -1,    -1,
    25,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,     9,    10,    11,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    25,   141,    27,    28,    29,    30,    31,    32,    33,
    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    44,    45,    46,    47,    -1,    49,    -1,     9,    10,    11,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    25,    -1,    27,    28,    29,    30,    31,
    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
    42,    43,    44,    45,    46,    47,   141,    49,     9,    10,
    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    25,    -1,    27,    28,    29,    30,
    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
    41,    42,    43,    44,    45,    46,    47,    -1,    49,     9,
    10,    11,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,    29,
    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
    40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,   141,
    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,
    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
    49,     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,
   141,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,
    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
    -1,    49,     9,    10,    11,    -1,    -1,    -1,    -1,   139,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,
    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
    47,    -1,    49,     9,    10,    11,    -1,    -1,    -1,    -1,
   139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
    -1,    27,    28,    29,    30,    31,    32,    33,    34,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    -1,    49,     9,    10,    11,    -1,    -1,    -1,
    -1,   139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    25,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    45,    46,    47,    -1,    49,     9,    10,    11,    -1,    -1,
    -1,    -1,   139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    25,    -1,    27,    28,    29,    30,    31,    32,    33,
    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    44,    45,    46,    47,    -1,    49,     9,    10,    11,    -1,
    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    25,    -1,    27,    28,    29,    30,    31,    32,
    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
    43,    44,    45,    46,    47,    -1,    49,     9,    10,    11,
    -1,    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    25,    -1,    27,    28,    29,    30,    31,
    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
    42,    43,    44,    45,    46,    47,    -1,    49,     9,    10,
    11,    -1,    -1,    -1,    -1,   139,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
    41,    42,    43,    44,    45,    46,    47,    -1,    49,     9,
    10,    11,    -1,    -1,    -1,    -1,   139,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,    29,
    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
    40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
     9,    10,    11,    -1,    -1,    -1,    -1,   139,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,
    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
    49,     9,    10,    11,    -1,    -1,   137,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,
    28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
    -1,    49,     9,    10,    11,    -1,    -1,   137,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,
    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
    47,    -1,    49,     9,    10,    11,    -1,    -1,   137,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
    -1,    27,    28,    29,    30,    31,    32,    33,    34,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    -1,    49,     9,    10,    11,    -1,    -1,   137,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    25,    -1,    27,    28,    29,    30,    31,    32,    33,    34,
    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    45,    46,    47,    -1,    49,     9,    10,    11,    -1,    -1,
   137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    25,    -1,    27,    28,    29,    30,    31,    32,    33,
    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
    25,   137,    27,    28,    29,    30,    31,    32,    33,    34,
    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    45,    46,    47,    -1,    49,    -1,   121,    -1,     9,    10,
    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    25,    -1,    27,    28,    29,    30,
    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
    41,    42,    43,    44,    45,    46,    47,   121,    49,    -1,
     9,    10,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    90,
    49,    -1,   137,     9,    10,    11,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
    -1,    27,    28,    29,    30,    31,    32,    33,    34,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    -1,    49,    10,    11,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
    -1,    27,    28,    29,    30,    31,    32,    33,    34,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    11,    49,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,
    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
    39,    40,    41,    42,    43,    44,    45,    46,    47,    25,
    49,    27,    28,    29,    30,    31,    32,    33,    34,    35,
    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
    46,    47,    -1,    49,    27,    28,    29,    30,    31,    32,
    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
    43,    44,    45,    46,    47,    -1,    49,    28,    29,    30,
    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
    41,    42,    43,    44,    45,    46,    47,    -1,    49
};
#define YYPURE 1

/*
 * Parser class
 * 
 * Made by Gerben VV
 */

/* constructor */
CParser::CParser()
{
}

/* destructor */
CParser::~CParser()
{
}

/* inits parser */
void CParser::Init()
{
}

/* some parser definitions */
#define YYEMPTY -2
#define YYEOF    0

#define YYINITDEPTH PARSER_INIT_STACK
#define YYMAXDEPTH  PARSER_MAX_STACK

/* disable unreachable code warning: bison puts a break after an exception */
//#pragma warn -8066

/* parses tokens to a node tree */
void CParser::Parse()
{
	register int yystate;
	register int yyn;

	register short  *yyssp;
	register CNode **yyvsp;

	short yyssa[YYINITDEPTH];
	CNode *yyvsa[YYINITDEPTH];

	short *yyss = yyssa;
	CNode **yyvs = yyvsa;

	int yystacksize = YYINITDEPTH;

	int yychar;
	int yychar1;

	CNode *yylval;
	CNode *yyval;

	int yylen;

	yystate = 0;
	yychar  = YYEMPTY;

	yyssp = yyss - 1;
	yyvsp = yyvs;

yynewstate:
	*++yyssp = (short)yystate;

	if (yyssp >= (yyss + yystacksize - 1))
	{
		CNode **yyvs1 = yyvs;
		short  *yyss1 = yyss;

		int size = yyssp - yyss + 1;

		if (yystacksize >= YYMAXDEPTH)
			throw new CException(E_INTERNAL, string("Parser stack overflow!"));

		yystacksize *= 2;
		if (yystacksize > YYMAXDEPTH)
			yystacksize = YYMAXDEPTH;

		yyss = (short *) alloca(yystacksize * sizeof(*yyssp));
		memcpy(yyss, yyss1, size * sizeof(*yyssp));
		yyvs = (CNode **) alloca(yystacksize * sizeof(*yyvsp));
		memcpy(yyvs, yyvs1, size * sizeof(*yyvsp));

		yyssp = yyss + size - 1;
		yyvsp = yyvs + size - 1;

		if (yyssp >= (yyss + yystacksize - 1))
			throw new CException(E_INTERNAL, string("Unknown parsing error!"));
	}

	yyn = yypact[yystate];
	if (yyn == YYFLAG)
		goto yydefault;

	if (yychar == YYEMPTY)
	{
		yychar = scanner->Scan(&yylval);
		debug("Token: %s", yytname[YYTRANSLATE(yychar)]);
	}

	if (yychar <= 0)
	{
		yychar1 = 0;
		yychar  = YYEOF;
	}
	else
	{
		yychar1 = YYTRANSLATE(yychar);
	}

	yyn += yychar1;
	if ((yyn < 0) || (yyn > YYLAST) || (yycheck[yyn] != yychar1))
	{
		goto yydefault;
	}

	yyn = yytable[yyn];
	if (yyn < 0)
	{
		if (yyn == YYFLAG)
			goto yyerrlab;

		yyn = -yyn;
		goto yyreduce;
	}
	else if (yyn == 0)
	{
		goto yyerrlab;
	}

	if (yyn == YYFINAL)
		return;

	if (yychar != YYEOF)
		yychar = YYEMPTY;

	*++yyvsp = yylval;
	yystate = yyn;
	goto yynewstate;

yydefault:
	yyn = yydefact[yystate];
	if (yyn == 0)
		goto yyerrlab;

yyreduce:
	yylen = yyr2[yyn];
	if (yylen > 0)
		yyval = yyvsp[1 - yylen];
    
	switch (yyn)
	{
	case 1:
		{
			yyval = NULL;
			break;
		}
	case 2:
		{
			if (settings->spaces_around_assignment_operators) {
				yyvsp[-2]->Surround();
			}

			if (settings->align_assignments) {
				formatter->AddAssignment(yyvsp[-3], yyvsp[0]);
			} else {
				yyvsp[-3]->Append(yyvsp[0]);
			}

			yyvsp[-3]->PrependNewline();

			break;}
	case 6:
		{
			yyval->PrependNewline();

			break;}
	case 7:
		{
			if (settings->space_inside_empty_brackets) {
				yyvsp[-2]->Append();
			}

			yyvsp[0]->token = ";"; //NOTE: could be an end tag! changing!

			yyval->PrependNewline();
			yyval->Append(yyvsp[0]);

			scanner->state = SS_HALT_COMPILER;

			break;}
	case 8:
		{
			formatter->FormatAssignments();

			break;}
	case 9:
		{
			yyval = NULL;

			break;}
	case 10:
		{
			if (settings->spaces_around_assignment_operators) {
				yyvsp[-2]->Surround();
			}

			if (settings->align_assignments) {
				formatter->AddAssignment(yyvsp[-3], yyvsp[0]);
			} else {
				yyvsp[-3]->Append(yyvsp[0]);

				//NOTE: append $$ & $2? see below
			}

			yyvsp[-3]->PrependNewline();

			break;}
	case 11:
		{
			formatter->FormatAssignments();

			//NOTE: some control structures have Append(.., true), some have not...
			//TODO: so can't we fix that, and remove this?

			if (yyval) {
				yyval->Append(yyvsp[0], true);
			} else {
				yyval = yyvsp[0];
			}

			break;}
	case 14:
		{
			yyval->PrependNewline();

			break;}
	case 15:
		{
			//NOTE: different error maybe?

			throw new CException(E_SOURCE, "__halt_compiler should be on ground level!");

			break;}
	case 16:
		{
			yyval->PrependNewline();

			break;}
	case 17:
		{ //NOTE: higher to bypass newline
			if (formatter->states.top() != S_ELSE) {
				formatter->states.push(S_CONTROL_STRUCTURE);
				formatter->indent++;
			}

			formatter->states.push(S_CONTROL_STRUCTURE);

			break;}
	case 18:
		{
			formatter->indent--;

			break;}
	case 19:
		{
			bool space = (settings->indent_style == OPT_KR) ||
				(settings->indent_style == OPT_PEAR);

			//put a comment after control structures
			if (settings->comment_after_structures) {
				formatter->AddStructureComment(yyvsp[-6], yyvsp[-3]);
			}

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-6]->Surround();
			}

			if (yyvsp[-1]) {
				if (space && (yyvsp[-3]->token[yyvsp[-3]->token.length() - 1] == '}') && (yyvsp[-3]->next == yyvsp[-1])) {
					yyvsp[-1]->Prepend();
				} else {
					yyvsp[-1]->PrependNewline();
				}

				yyvsp[-3]->Append(yyvsp[-1], true);
			}

			if (yyvsp[0]) {
				if (space && (yyvsp[-3]->token[yyvsp[-3]->token.length() - 1] == '}') && (yyvsp[-3]->next == yyvsp[0])) {
					yyvsp[0]->Prepend();
				} else {
					yyvsp[0]->PrependNewline();
				}

				yyvsp[-3]->Append(yyvsp[0], true);
			}

			yyval->Append(yyvsp[-3]);

			formatter->states.pop();
			if (formatter->states.top() != S_ELSE) {
				formatter->states.pop();

				yyval->PrependNewline();
			} else { //NOTE: beware of comments and newlines
				yyval->Prepend();

				formatter->indent++;
			}

			break;}
	case 20:
		{
			EState state = formatter->states.top();
			if ((state != S_ELSE) && (state != S_CONTROL_STRUCTURE)) {
				formatter->states.push(S_CURLY_BRACKETS);
				formatter->indent++;
			}

			formatter->states.push(S_CURLY_BRACKETS);

			break;}
	case 21:
		{
			formatter->FormatOpenCurlyBracket(&yyval);
			formatter->FormatCloseCurlyBracket(yyvsp[0]);

			yyval->Append(yyvsp[0], true); //NOTE: must always be true!

			formatter->states.pop();

			if (formatter->states.top() == S_CURLY_BRACKETS) {
				formatter->states.pop();
				formatter->indent--;
			}

			break;}
	case 22:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 23:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 24:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 25:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 26:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 27:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 28:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 29:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 30:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 32:
		{
			// <?= $a ?>
			//formatter->HandleSemicolon($3);
			if (yyvsp[0]->token[0] != ';') {
				yyvsp[-1]->Append();
			}

			yyval->Append();
			yyval->Append(yyvsp[0]);

			//NOTE: here too?? well it becomes a T_ECHO => which has an expr list!

			break;}
	case 34:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 35:
		{
			if (yyval->token[0] == ';') {
				EState state = formatter->states.top();

				if ((state != S_CONTROL_STRUCTURE) && (state != S_ELSE)) {
					if (settings->remove_semicolon_lines) {
						yyval->token = ""; //NOTE change!
					} else {
						yyval->PrependNewline();
					}
				}
			} else { //an end tag
				if (scanner->in_short_tag) {
					yyval->Prepend();
				} else {
					yyval->Prepend('\n');
				}
			}

			break;}
	case 36:
		{
			throw new CException(E_SOURCE, "Use is not allowed!");

			break;}
	case 37:
		{
			if (settings->space_inside_brackets) {
				yyvsp[-2]->Surround();
			}

			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 38:
		{
			formatter->HandleSemicolon(yyvsp[0]);

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 40:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 41:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 42:
		{
			formatter->states.pop();
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			//TODO: structure comments

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-8]->Surround();
			}

			yyvsp[-1]->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 43:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 44:
		{
			formatter->states.pop();
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			//TODO: structure comments

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-6]->Surround();
			}

			yyvsp[-1]->PrependNewline();
			yyval->Append(yyvsp[0]);

			break;}
	case 45:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 46:
		{
			formatter->states.pop();
			formatter->indent--;

			//put a comment after control structures
			if (settings->comment_after_structures) {
				formatter->AddStructureComment(yyvsp[-3], yyvsp[0]);
			}

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-3]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 47:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 48:
		{
			formatter->states.pop();
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			//TODO: structure comments

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-11]->Append();
				yyvsp[-5]->Prepend(' ');
			}

			yyvsp[-9]->Append();
			yyvsp[-7]->Append();
			yyvsp[-1]->PrependNewline();

			yyval->Append(yyvsp[0]);

			break;}
	case 49:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 50:
		{
			formatter->states.pop();
			formatter->indent--;

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-8]->Append();
				yyvsp[-2]->Prepend(' ');
			}

			//TODO: format for(;;) { .. }

			//append spaces
			yyvsp[-6]->Append();
			yyvsp[-4]->Append();

			//put a comment after control structures
			if (settings->comment_after_structures) {
				(yyvsp[-7] ? yyvsp[-7] : yyvsp[-6])->Append(yyvsp[-3] ? yyvsp[-3] : yyvsp[-4]);
				formatter->AddStructureComment(yyvsp[-7] ? yyvsp[-7] : yyvsp[-6], yyvsp[0]);
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 51:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent += (settings->indent_case_default) + 1;

			break;}
	case 52:
		{
			formatter->states.pop();
			formatter->indent -= (settings->indent_case_default) + 1;

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-3]->Surround();
			}

			//put a comment after control structures
			if (settings->comment_after_structures) {
				formatter->AddStructureComment(yyvsp[-3], yyvsp[0]);
			}

			if (yyvsp[0]->token[0] != ':') {
				switch (settings->indent_style) {
	case OPT_KR:
	case OPT_PEAR:
		yyvsp[0]->Prepend();
		break;

	default:
		yyvsp[0]->PrependNewline();
		break;
				}
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 53:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 54:
		{
			formatter->states.pop();
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			//TODO: structure comments

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-10]->Append();
				yyvsp[-5]->Prepend(' ');
			}

			yyvsp[-8]->Surround();
			yyvsp[-1]->PrependNewline();

			yyval->Append(yyvsp[0]);

			break;}
	case 55:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 56:
		{
			formatter->states.pop();
			formatter->indent--;

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-7]->Append();
				yyvsp[-2]->Prepend(' ');
			}

			//surround 'as'
			yyvsp[-5]->Surround();

			//put a comment after control structures
			if (settings->comment_after_structures) {
				yyvsp[-6]->Append(yyvsp[-3] ? yyvsp[-3] : yyvsp[-4]);
				formatter->AddStructureComment(yyvsp[-6], yyvsp[0]);
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 57:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 58:
		{
			formatter->states.pop();
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			//TODO: structure comments

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-6]->Surround();
			}

			yyvsp[-1]->PrependNewline();

			yyval->Append(yyvsp[0]);

			break;}
	case 59:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 60:
		{
			formatter->states.pop();
			formatter->indent--;

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-3]->Surround();
			}

			//put a comment after control structures
			if (settings->comment_after_structures) {
				formatter->AddStructureComment(yyvsp[-3], yyvsp[0]);
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 61:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 62:
		{
			formatter->states.pop();
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			if (settings->space_after_structures) {
				yyvsp[-4]->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-2]->Surround();
			}

			//NOTE: there must be no structure comment here!

			yyvsp[-5]->Append();
			//$3->Append($4, true);
			yyval->Append(yyvsp[0]);

			break;}
	case 63:
		{
			formatter->states.push(S_CURLY_BRACKETS);
			formatter->indent++;

			break;}
	case 64:
		{
			formatter->FormatOpenCurlyBracket(&yyvsp[-12]);
			formatter->FormatCloseCurlyBracket(yyvsp[-9]);
			formatter->FormatOpenCurlyBracket(&yyvsp[-3]);
			formatter->FormatCloseCurlyBracket(yyvsp[-1]);

			if (settings->space_after_structures) {
				yyvsp[-8]->Append();
			}

			yyvsp[-12]->Append(yyvsp[-9], true);
			yyvsp[-3]->Append((yyvsp[0]) ? yyvsp[0] : yyvsp[-1], true);

			formatter->states.pop();
			formatter->indent--;

			if (settings->space_inside_brackets) {
				yyvsp[-7]->Append();
				yyvsp[-4]->Prepend(' ');
			}

			//NOTE: comment function does not work here; expects } as end!

			yyvsp[-8]->PrependNewline(); // 'cache' does not hang on '}'
			yyvsp[-6]->Append();

			yyvsp[-12]->Append(yyvsp[-8], true);
			yyval->Append(yyvsp[-3]);

			break;}
	case 65:
		{
			yyval = NULL;

			break;}
	case 66:
		{
			if (settings->space_after_structures) {
				yyvsp[-5]->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-3]->Surround();
			}

			yyvsp[-5]->PrependNewline(-1);

			//TODO: structure comments

			if (!yyval) {
				yyval = yyvsp[-5];
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 67:
		{
			yyval = NULL;

			break;}
	case 68:
		{
			yyval->PrependNewline(-1);

			yyval->Append((yyvsp[0]) ? yyvsp[0] : yyvsp[-1]);

			break;}
	case 69:
		{
			yyval = NULL;

			break;}
	case 70:
		{
			formatter->indent++;

			break;}
	case 71:
		{
			bool space = (settings->indent_style == OPT_KR ||
				settings->indent_style == OPT_PEAR);

			formatter->indent--;

			//put a comment after control structures
			if (settings->comment_after_structures) {
				formatter->AddStructureComment(yyvsp[-3], yyvsp[0]);
			}

			if (settings->space_after_structures) {
				yyvsp[-5]->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-3]->Surround();
			}

			if (yyval) {
				if (space && (yyval->token[yyval->token.length() - 1] == '}')) { //NOTE: filty hack
					yyvsp[-5]->Prepend();
				} else {
					yyvsp[-5]->PrependNewline();
				}
			} else {
				yyval = yyvsp[-5];
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 72:
		{
			yyval = NULL;

			break;}
	case 73:
		{
			formatter->states.push(S_ELSE);
			formatter->indent++;

			break;}
	case 74:
		{
			formatter->indent--;
			formatter->states.pop();

			yyval->Append(yyvsp[0]);

			break;}
	case 75:
		{
			formatter->indent--;

			if (yyvsp[-2]) {
				yyvsp[-2]->token = ""; //NOTE: changing!
			}

			yyvsp[0]->PrependNewline(-(int)(settings->indent_case_default));
			if (yyvsp[-1]) {
				yyval->Append(yyvsp[-1], true);
			}

			formatter->indent++;

			yyval->Append(yyvsp[0], true);

			break;}
	case 76:
		{
			formatter->indent--;

			formatter->HandleSemicolon(yyvsp[0]);

			if (yyvsp[-3]) {
				yyvsp[-3]->token = ""; //NOTE: changing!
			}

			yyvsp[-1]->PrependNewline(-(int)(settings->indent_case_default));

			yyvsp[-1]->Append(yyvsp[0]);
			if (yyvsp[-2]) {
				yyval->Append(yyvsp[-2], true);
			}

			formatter->indent++;

			yyval->Append(yyvsp[-1], true);

			break;}
	case 77:
		{
			yyval = NULL;

			break;}
	case 78:
		{
			formatter->indent--;

			yyvsp[-3]->PrependNewline();
			yyvsp[-3]->Append();

			if (!yyval) {
				yyval = yyvsp[-3];
			} else {
				yyval->Append(yyvsp[-3], true);
			}

			formatter->indent++;

			if (yyvsp[0]) {
				yyvsp[-1]->Append(yyvsp[0], true);
			}

			yyval->Append(yyvsp[-1]);

			break;}
	case 79:
		{
			formatter->indent--;

			yyvsp[-2]->PrependNewline();

			if (!yyval) {
				yyval = yyvsp[-2];
			} else {
				yyval->Append(yyvsp[-2], true);
			}

			formatter->indent++;

			if (yyvsp[0]) {
				yyvsp[-1]->Append(yyvsp[0], true);
			}

			yyval->Append(yyvsp[-1]);

			break;}
	case 82:
		{
			yyval = NULL;

			break;}
	case 84:
		{
			yyval = NULL;

			break;}
	case 85:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 87:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 88:
		{
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 89:
		{
			yyvsp[-3]->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 90:
		{
			yyval = NULL;

			break;}
	case 93:
		{
			yyval->Append(yyvsp[0], true);

			break;}
	case 94:
		{
			formatter->FormatOpenCurlyBracket(&yyvsp[-2]);
			formatter->FormatCloseCurlyBracket(yyvsp[0]);

			formatter->indent--;

			yyvsp[-2]->Append(yyvsp[0], true);

			if (settings->space_after_structures) {
				yyval->Append();
			}

			if (settings->space_inside_brackets) {
				yyvsp[-6]->Append();
				yyvsp[-3]->Prepend(' ');
			}

			yyval->PrependNewline();
			yyvsp[-5]->Append();
			yyval->Append(yyvsp[-2]);

			formatter->indent++;

			break;}
	case 95:
		{
			yyval = NULL;

			break;}
	case 97:
		{
			formatter->states.push(S_CURLY_BRACKETS);
			formatter->indent++;

			break;}
	case 98:
		{
			formatter->FormatOpenCurlyBracket(&yyvsp[-3], true);
			formatter->FormatCloseCurlyBracket(yyvsp[0]);

			yyvsp[-3]->Append(yyvsp[0], true);

			formatter->states.pop();
			formatter->indent--;

			if (yyvsp[-5]) {
				if (settings->space_inside_brackets) {
					yyvsp[-5]->Surround();
				}
			} else if (settings->space_inside_empty_brackets) {
				yyvsp[-6]->Append();
			}

			yyval->PrependNewline();
			yyval->Append();
			yyval->Append(yyvsp[-3]);

			break;}
	case 99:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 100:
		{
			formatter->FormatOpenCurlyBracket(&yyvsp[-3], true);
			formatter->FormatCloseCurlyBracket(yyvsp[0]);

			yyvsp[-3]->Append(yyvsp[0], true);

			formatter->states.pop();
			formatter->indent--;

			yyval->Append();
			yyval->Append(yyvsp[-3]);

			break;}
	case 101:
		{
			formatter->states.push(S_CONTROL_STRUCTURE);
			formatter->indent++;

			break;}
	case 102:
		{
			formatter->FormatOpenCurlyBracket(&yyvsp[-3], true);
			formatter->FormatCloseCurlyBracket(yyvsp[0]);

			yyvsp[-3]->Append(yyvsp[0], true);

			formatter->states.pop();
			formatter->indent--;

			yyval->Append();
			yyval->Append(yyvsp[-3]);

			break;}
	case 104:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 105:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 106:
		{
			yyval = NULL;

			break;}
	case 107:
		{
			yyval->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 108:
		{
			yyval = NULL;

			break;}
	case 109:
		{
			yyval->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 110:
		{
			yyval = NULL;

			break;}
	case 111:
		{
			yyval->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 113:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 115:
		{
			yyval = NULL;

			break;}
	case 116:
		{
			if (yyval) {
				yyval->Append(yyvsp[0]);
			} else {
				yyval = yyvsp[0];
			}

			break;}
	case 117:
		{
			if (yyval) {
				yyval->Append(yyvsp[-1]);
			} else {
				yyval = yyvsp[-1];
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 118:
		{
			yyvsp[-1]->Surround();

			if (yyval) {
				yyval->Append(yyvsp[0]);
			} else {
				yyval = yyvsp[-3];
				yyval->Append(yyvsp[0]);
			}

			break;}
	case 119:
		{
			yyvsp[-1]->Surround();

			if (yyval) {
				yyval->Append(yyvsp[0]);
			} else {
				yyval = yyvsp[-2];
				yyval->Append(yyvsp[0]);
			}

			break;}
	case 120:
		{
			yyvsp[-2]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 121:
		{
			yyvsp[-3]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 122:
		{
			yyvsp[-5]->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 123:
		{
			yyvsp[-4]->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 124:
		{
			yyval = NULL;

			break;}
	case 125:
		{
			yyval->Append();

			break;}
	case 126:
		{
			yyval->Append();

			break;}
	case 127:
		{
			if (settings->space_inside_empty_brackets) {
				yyval = new CNode();
				if (yyval == NULL) {
					throw new CException(E_MEMORY);
				}

				yyval->token = ' ';
			} else {
				yyval = NULL;
			}

			break;}
	case 128:
		{
			if (settings->space_inside_brackets) {
				yyval->Surround();
			}

			break;}
	case 130:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 131:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 132:
		{
			yyvsp[-2]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 133:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 136:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 137:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 138:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 139:
		{
			yyvsp[-3]->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 141:
		{
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 142:
		{
			yyvsp[0]->PrependNewline();

			if (yyval) {
				yyval->Append(yyvsp[0], true);
			} else {
				yyval = yyvsp[0];
			}

			break;}
	case 143:
		{
			yyval = NULL;

			break;}
	case 144:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 145:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 146:
		{
			formatter->states.push(S_CURLY_BRACKETS);
			formatter->indent++;

			break;}
	case 147:
		{
			formatter->states.pop();
			formatter->indent--;

			if (yyvsp[-3]) {
				if (settings->space_inside_brackets) {
					yyvsp[-3]->Surround();
				}
			} else if (settings->space_inside_empty_brackets) {
				yyvsp[-4]->Append();
			}

			yyvsp[-7]->Append();

			if (!yyval) {
				yyval = yyvsp[-7];
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 149:
		{
			formatter->FormatOpenCurlyBracket(&yyval, true);
			formatter->FormatCloseCurlyBracket(yyvsp[0]);

			yyval->Append(yyvsp[0], true);

			break;}
	case 152:
		{
			yyval = NULL;

			break;}
	case 153:
		{
			yyval->Append();

			break;}
	case 155:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 162:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 163:
		{
			yyvsp[-3]->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 165:
		{
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 166:
		{
			yyvsp[-3]->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 167:
		{
			yyval->Append();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 168:
		{
			yyval = NULL;

			break;}
	case 170:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 172:
		{
			if (yyvsp[-3]) {
				if (settings->space_inside_brackets) {
					yyvsp[-3]->Surround();
				}
			} else if (settings->space_inside_empty_brackets) {
				yyvsp[-4]->Append();
			}

			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 173:
		{
			yyval->Append();
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 174:
		{
			yyval->Append();
			yyvsp[-2]->Surround();
			yyval->Append((yyvsp[0]) ? yyvsp[0] : yyvsp[-1]);

			//NOTE: warning?

			break;}
	case 176:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 177:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 178:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 179:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 180:
		{
			yyval->Append();
			yyval->Append((yyvsp[0]) ? yyvsp[0] : yyvsp[-1]);

			break;}
	case 181:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 183:
		{
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 184:
		{
			if (settings->space_inside_brackets) { //maybe make another settings for this?
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 185:
		{
			yyvsp[-3]->Surround();
			yyvsp[-1]->Surround();
			yyval->Append(yyvsp[0]);

			break;}
	case 189:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 190:
		{
			if (yyvsp[0]) {
				yyval->Append(yyvsp[0]);
			}

			break;}
	case 191:
		{
			formatter->indent++;

			break;}
	case 192:
		{
			if (yyvsp[-1]) {
				if (settings->space_inside_brackets) {
					yyvsp[-1]->Surround();
				}

				yyvsp[-1]->PrependNewline();
				yyvsp[0]->PrependNewline(-1);

				yyvsp[-3]->Append(yyvsp[0], true);
				yyval->Append(yyvsp[-3]);
			} else if (settings->space_inside_empty_brackets) {
				yyvsp[-3]->Append();

				yyval->Append(yyvsp[0]);
			}

			formatter->indent--;

			break;}
	case 193:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 194:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 195:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 196:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 197:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 198:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 199:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 200:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 201:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 202:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 203:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 204:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_assignment_operators);

			break;}
	case 205:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 206:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 207:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 208:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 209:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 210:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 211:
		{
			yyval->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 212:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_bitwise_operators);

			break;}
	case 213:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_bitwise_operators);

			break;}
	case 214:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_bitwise_operators);

			break;}
	case 215:
		{

			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], true);

			break;}
	case 216:
		{
			if (settings->spaces_around_math_operators) {
				yyvsp[-1]->Surround();
			} else if (yyvsp[0]->token[0] == '+') {
				yyvsp[-1]->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 217:
		{
			if (settings->spaces_around_math_operators) {
				yyvsp[-1]->Surround();
			} else if (yyvsp[0]->token[0] == '-') {
				yyvsp[-1]->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 218:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_math_operators);

			break;}
	case 219:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_math_operators);

			break;}
	case 220:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_math_operators);

			break;}
	case 221:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_relational_operators);

			break;}
	case 222:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_relational_operators);

			break;}
	case 223:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_bitwise_operators);

			break;}
	case 224:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_bitwise_operators);

			break;}
	case 225:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_logical_operators);

			break;}
	case 226:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_logical_operators);

			break;}
	case 227:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_logical_operators);

			break;}
	case 228:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_logical_operators);

			break;}
	case 229:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_logical_operators);

			break;}
	case 230:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_equality_operators);

			break;}
	case 231:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_equality_operators);

			break;}
	case 232:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_equality_operators);

			break;}
	case 233:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_equality_operators);

			break;}
	case 234:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_relational_operators);

			break;}
	case 235:
		{
			formatter->FormatOperator(yyval, yyvsp[-1], yyvsp[0], settings->spaces_around_relational_operators);

			break;}
	case 236:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 237:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 238:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 239:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 240:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 241:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 242:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 243:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 246:
		{
			yyval->Append((yyvsp[0]) ? yyvsp[0] : yyvsp[-1]);

			break;}
	case 248:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 249:
		{
			yyval = NULL;

			break;}
	case 250:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 251:
		{
			yyval = NULL;

			break;}
	case 252:
		{
			if (settings->space_inside_empty_brackets) {
				yyval->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 253:
		{
			if (settings->space_inside_brackets) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 254:
		{
			yyval = NULL;

			break;}
	case 255:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 266:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 267:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 268:
		{
			if (settings->space_inside_empty_brackets && (yyvsp[-1] == NULL)) {
				yyvsp[-2]->Append();
			} else if (settings->space_inside_brackets && (yyvsp[-1] != NULL)) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 273:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 274:
		{
			yyval = NULL;

			break;}
	case 275:
		{
			if (yyvsp[0]) {
				yyvsp[0]->token = ""; //NOTE: changing!
				yyval->Append(yyvsp[0]);
			}

			break;}
	case 276:
		{
			yyval = NULL;

			break;}
	case 278:
		{
			yyvsp[-3]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 279:
		{
			yyvsp[-1]->Append();
			yyval->Append(yyvsp[0]);

			break;}
	case 280:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 284:
		{
			yyval->Append(yyvsp[0] ? yyvsp[0] : (yyvsp[-1] ? yyvsp[-1] : yyvsp[-2]));

			break;}
	case 286:
		{
			if (yyval) {
				yyval->Append(yyvsp[0]);
			} else {
				yyval = yyvsp[0];
			}

			break;}
	case 287:
		{
			yyval = NULL;

			break;}
	case 288:
		{
			yyval->Append((yyvsp[0]) ? yyvsp[0] : yyvsp[-1]);

			break;}
	case 289:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 290:
		{
			yyval = NULL;

			break;}
	case 292:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 296:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 297:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 298:
		{
			if (settings->space_inside_empty_block_brackets && (yyvsp[-1] == NULL)) {
				yyvsp[-2]->Append();
			} else if (settings->space_inside_block_brackets && (yyvsp[-1] != NULL)) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 299:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 302:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 303:
		{
			yyval = NULL;

			break;}
	case 307:
		{
			if (settings->space_inside_empty_block_brackets && (yyvsp[-1] == NULL)) {
				yyvsp[-2]->Append();
			} else if (settings->space_inside_block_brackets && (yyvsp[-1] != NULL)) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 308:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 311:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 313:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 314:
		{
			yyvsp[-1]->Append();

			if (!yyval) {
				yyval = yyvsp[-1];
			}

			if (yyvsp[0]) {
				yyval->Append(yyvsp[0]);
			} else if (yyval != yyvsp[-1]) {
				yyval->Append(yyvsp[-1]);
			}

			break;}
	case 316:
		{
			yyval = NULL;

			break;}
	case 318:
		{
			if (yyvsp[-1]) {
				if (settings->space_inside_brackets) {
					yyvsp[-1]->Surround();
				}
			} else if (settings->space_inside_empty_brackets) {
				yyvsp[-2]->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 319:
		{
			yyval = NULL;

			break;}
	case 320:
		{
			if (yyvsp[0]) {
				yyvsp[0]->token = ""; //NOTE: changing!
				yyval->Append(yyvsp[0]);
			}

			break;}
	case 321:
		{
			yyvsp[-2]->PrependNewline();
			yyvsp[-3]->Append(yyvsp[-2], true);
			yyval->Append(yyvsp[0]);

			break;}
	case 322:
		{
			yyvsp[0]->PrependNewline();
			yyvsp[-1]->Append(yyvsp[0], true);
			yyval->Append(yyvsp[-1]);

			break;}
	case 323:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 325:
		{
			yyvsp[-3]->PrependNewline();
			yyvsp[-4]->Append(yyvsp[-3], true);
			yyval->Append(yyvsp[0]);

			break;}
	case 326:
		{
			yyvsp[-1]->PrependNewline();
			yyvsp[-2]->Append(yyvsp[-1], true);
			yyval->Append(yyvsp[0]);

			break;}
	case 327:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 328:
		{
			yyval->Append(yyvsp[0]);

			break;}
	case 329:
		{
			if (settings->space_inside_brackets) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 330:
		{
			if (settings->space_inside_brackets) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 331:
		{
			if (settings->space_inside_brackets) {
				yyvsp[-1]->Surround();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 332:
		{
			if ((yyvsp[0]->token[0] != '(') || (yyvsp[0]->token[yyvsp[0]->token.length() - 1] != ')')) {
				yyval->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 333:
		{
			if ((yyvsp[0]->token[0] != '(') || (yyvsp[0]->token[yyvsp[0]->token.length() - 1] != ')')) {
				yyval->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 334:
		{
			if ((yyvsp[0]->token[0] != '(') || (yyvsp[0]->token[yyvsp[0]->token.length() - 1] != ')')) {
				yyval->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 335:
		{
			if ((yyvsp[0]->token[0] != '(') || (yyvsp[0]->token[yyvsp[0]->token.length() - 1] != ')')) {
				yyval->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	case 336:
		{
			if ((yyvsp[0]->token[0] != '(') || (yyvsp[0]->token[yyvsp[0]->token.length() - 1] != ')')) {
				yyval->Append();
			}

			yyval->Append(yyvsp[0]);

			break;}
	}

	yyvsp -= yylen;
	yyssp -= yylen;

	*++yyvsp = yyval;

	yyn = yyr1[yyn];

	yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
	if ((yystate >= 0) && (yystate <= YYLAST) && (yycheck[yystate] == *yyssp)) {
		yystate = yytable[yystate];
	} else {
		yystate = yydefgoto[yyn - YYNTBASE];
	}

	goto yynewstate;
    
yyerrlab:
	yyn = yypact[yystate];
	if ((yyn > YYFLAG) && (yyn < YYLAST)) {
		int    i,
			count;
		string msg = "Parse error, unexpected ";

		msg += yytname[yychar1];
		//msg += "(" + (*(yyvsp + 1))->token + ")";
		msg += "(" + yylval->token + ")";

		count = 0;
		for (i = (yyn < 0 ? -yyn : 0); i < (sizeof(yytname) / sizeof(char *)); i++) {
			if (yycheck[i + yyn] == i) {
				count++;
			}
		}

		if (count < 5) {
			count = 0;
			for (i = (yyn < 0 ? -yyn : 0); i < (sizeof(yytname) / sizeof(char *)); i++) {
				if (yycheck[i + yyn] == i) {
					msg += (count == 0) ? ", expecting " : " or ";
					msg += yytname[i];

					count++;
				}
			}
		}

		msg += " on line ";
		msg += int_to_string(scanner->line);
		msg += "!";

		throw new CException(E_SOURCE, msg);
	} else {
		throw new CException(E_SOURCE,
			string("Parse error on line ") + int_to_string(scanner->line) + "!");
	}
    /* an exception has been thrown */
}

/* enable unreachable code warning */
//#pragma warn +8066

}